前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >正则三剑客-sed

正则三剑客-sed

作者头像
老七Linux
发布2018-05-09 15:18:45
6810
发布2018-05-09 15:18:45
举报

与grep不同的是,当使用sed匹配字符串的时候如下:

#sed -n ‘//‘p file             // 内填写需要匹配的字符串 例如: #sed -n ‘/root/’p /etc/passwd :匹配包含字符串root的行!(使用grep 匹配则是#grep ‘root’ /etc/passwd

代码语言:javascript
复制
[[email protected] sed]# grep 'root' passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin
代码语言:javascript
复制
[[email protected] sed]# sed -n '/root/'p passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

和grep一样也可使用特殊字符匹配:

# sed -n ‘/r.t/’p passwd

# sed -n ‘/r*t/’p passwd

# sed -nr ‘/o+t/’p passwd = #sed -n ‘/o\+t/’ passwd            -r:脱意的意思,类似于\

# sed -nr ‘/o{2}/’p passwd          //匹配两次o

# sed -nr ‘/root|login/’p passwd             //匹配root或login的行

总之一句话,想少用\  那你就用-r


sed打印指定的行(注意:sed -n 一般都是和p一起用):

#sed -n ‘2’p passwd          //打印第二行

#sed -n ‘2,5’p passwd                 //打印第二行到第五行

#sed -n ‘5,$‘p passwd                 //打印第五行到最后一行

#sed -n ‘1,$’p passwd                 //打印全部的行

#sed -e ‘2,5’p -e ‘/root/’p -n passwd               //打印第二行到第五行以及包含root的行 -e :多点编辑 //在一个表达式中执行多个动作!

# sed -n ‘/nologin/’Ip passwd    I:大写的i 代表着不区分大小写


sed删除指定的行:

案例分析:

假如有个日志文件,很大将近50G,如果使用vim打开进行删除,这样不仅浪费我们的硬件资源,而且还需要等待很长的时间,怎么能不打开就直接删除老的内容呢?

首先使用grep查找指定日期的行(#grep -n ‘关键字’ logfile)。

然后删除之后的所有行:

#sed -i ‘5000,$’d logfile i:修改内容   d:删除动作 //删除5000行到末尾的行

#sed -i ‘/user2/’d logfile          //删除user2这个关键字的行


sed替换功能:

#sed ‘1,20s/root/toor/g’ passwd

#sed -r ‘1,10s/ro+/r/g’ passwd                       //因为表达式中有 + 所以必须要使用 -r 去脱意

把如下字符串,以:为分割点进行第一个和最后一个调换位置:

代码语言:javascript
复制
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

[[email protected] sed]# head passwd | sed -r 's#([^:]+):(.*):([^:]+)#\3:\2:\1#g'

/bin/bash:x:0:0:root:/root:root

/sbin/nologin:x:1:1:bin:/bin:bin

/sbin/nologin:x:2:2:daemon:/sbin:daemon

#sed ‘s#sbin/nologin#123#g’ passwd = #sed -r ‘s/\/sbin\/login/123/g’ passwd           //脱意一下

#sed ‘s/[a-zA-Z]//g’ passwd            //删除passwd中所有的英文字符(替换成空即为删除)

#head passwd | sed -r ‘s/(.*)/aaa:&/g’              //在前十行每行的前面添加 aaa:

##反复练习,方可熟能生巧##

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016/07/04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档