1.grep -l 过滤包含内容的文件名,只显示文件名,不显示内容
[root@junnan1 ~]# find /etc/ -type f |xargs grep -l '*.conf'
/etc/fonts/conf.d/README
/etc/libreport/report_event.conf
/etc/rc.d/init.d/functions
/etc/selinux/targeted/active/file_contexts
/etc/selinux/targeted/contexts/files/file_contexts
/etc/selinux/targeted/contexts/files/file_contexts.bin
/etc/dracut.conf
/etc/systemd/user.conf
/etc/dbus-1/session.conf
/etc/dbus-1/system.conf
/etc/udev/hwdb.bin
/etc/ld.so.conf
/etc/rsyslog.conf
[root@junnan1 ~]#
注释:参数小写L
2.把过滤出第1行到第5行的内容,显示出来。
[root@junnan1 /oldboy]# sed -n '1,5p' lidao.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@junnan1 /oldboy]#
检查,如下
[root@junnan1 /oldboy]# cat lidao.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
3.让sed支持扩展正则,-r
[root@junnan1 /oldboy]# sed -rn '/oldboy|yy/p' lidao.txt
101,oldboy,CEO
104,yy,CFO
[root@junnan1 /oldboy]#
- 检查,如下
[root@junnan1 /oldboy]# cat lidao.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
#4.把从102到105的行过滤出来并显示,这种用法常用在过滤某个时间段的内容。
[root@junnan1 /oldboy]# sed -n '/102/,/105/p' lidao.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@junnan1 /oldboy]#
5. 3后面的a是一个命令,该行的意思是在第三行下面插入nihoawoshi UFO
[root@junnan1 /oldboy]# sed '3anihoawoshi UFO' lidao.txt
101,oldboy,CEO
102,zhangyao,CTO
102,zhangyao,CTO
nihoawoshi UFO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
[root@junnan1 /oldboy]#
6.知识点-i.bak 意思是在添加内容nihoawoshi UFO之前,先备份。
[root@junnan1 /oldboy]# ls
a.txt lidao.txt oldboy.txt oldboy.txt.bak
[root@junnan1 /oldboy]# sed -i.bak '3anihoawoshi UFO' lidao.txt [root@junnan1 /oldboy]# ls
a.txt lidao.txt lidao.txt.bak oldboy.txt oldboy.txt.bak
[root@junnan1 /oldboy]#
7.知识点:命令i和d,命令的意思是删除空行,并真实修改(i)文件,而不只是我们看到的删除那样。
[root@junnan1 /oldboy]# cat -n lidao.txt
1 dddd
2 dddd
3 dddff
4
5 dddff
6
7 fff
[root@junnan1 /oldboy]# sed -i '/^$/d' lidao.txt
- 检查 如下图:
[root@junnan1 /oldboy]# cat -n lidao.txt
1 dddd
2 dddd
3 dddff
4 dddff
5 fff
[root@junnan1 /oldboy]#
8.删除空行(^$)
[root@junnan1 /oldboy]# cat -n lidao.txt
1 dddd
2
3 dddd
4 dddff
5 dddff
6 fff
[root@junnan1 /oldboy]# sed -n '/^$/p' lidao.txt
9.知识点 !,意思是否,!p就是不显示
[root@junnan1 /oldboy]# sed -n '/^$/!p' lidao.txt
dddd
dddd
dddff
dddff
fff
[root@junnan1 /oldboy]#
10.不显示文件/etc/ssh/sshd_config 的空行或以#号开头的行
sed /etc/ssh/sshd_config/$|!p
sed grep
[root@junnan1 /oldboy]# sed 's#oldboy#UFO#g' oldboy.txt
[root@UFOedu59 /UFO]# cat UFO.txt
I am UFO teacher!
I teach linux.
I like badminton ball,billiard ball and chinese chess!
my blog is http://UFO.blog.51cto.com
our size is http://blog.UFOedu.com
my qq is 1351441522
not 4900000448
my god,i am not oldbey,but OLDBOY!
[root@junnan1 /oldboy]#
11.把文件中的oldboy替换成UFO
[root@oldboyedu59 /oldboy]# cat oldboy.txt
I am oldboy oldboy teacher!
I teach linux.
I like badminton ball,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 1351441522
not 4900000448
my god,i am not oldbey,but OLDBOY!
"oldboy.txt" 13L, 294C written
[root@junnan1 /oldboy]# sed 's#oldboy#UFO#' oldboy.txt
- 检查,如下图
[root@UFOedu59 /oldboy]# cat oldboy.txt
I am UFO oldboy teacher!
I teach linux.
I like badminton ball,billiard ball and chinese chess!
my blog is http://UFO.blog.51cto.com
our size is http://blog.UFOedu.com
my qq is 1351441522
not 4900000448
my god,i am not oldbey,but OLDBOY!
[root@junnan1 /oldboy]#
12. 后向引用,把12346变成<123456>和12<34>56,<1><2><3><4><5><6>
- 12<34>56
[root@junnan1 /oldboy]# echo 123456 |sed -r 's#(..)(..)(..)#<\2>#g'
<34>
[root@junnan1 /oldboy]#
- <123456>
[root@junnan1 /oldboy]# echo 123456|sed -r 's#(.*)#<\1>#'
<123456>
[root@junnan1 /oldboy]#
[root@junnan1 /oldboy]# echo 123456 |sed -r 's#(.)#<\1>#'
<1>23456
- <1><2><3><4><5><6>
[root@junnan1 /oldboy]# echo 123456 |sed -r 's#(.)#<\1>#g'
<1><2><3><4><5><6>
[root@junnan1 /oldboy]#
注释:其中的()意思是把管道前面输出的结果,放进小括号内,\1表示引用前面第一个空号里面的内容,括号内可以加正则符号,比如点.