三剑客grep及sed

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表示引用前面第一个空号里面的内容,括号内可以加正则符号,比如点.

你可能感兴趣的:(三剑客grep及sed)