一、grep补充
例1::查找系统下包含“oldboy”的文件,只显示文件名
[root@wolf1 ~]# find ./ -type f | xargs grep -l 'oldboy'
./.bash_history
./oldboy.txt
./.viminfo
./old.txt
grep参数
1.-l(小写字母L)
在系统中查找包含“oldboy”的文件(只显示文件名)
grep过滤的时候只显示文件名,不显示文件内容
2.-R 递归过滤
[root@wolf1 ~]# grep -Rl 'oldboy' /data/ /etc/
/data/oldboy.txt
/data/id.txt
3.-A (after):显示grep找出的内容及接下面的几行
[root@wolf1 /data]# grep -A2 '103' lidao.txt
103,Alex,COO
104,yy,CFO
105,feixue,CIO
4.-B(before):显示grep找出的内容及接上面的几行
[root@wolf1 /data]# grep -B2 '103' lidao.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
5.-C:显示grep找出的内容及上下的几行
-C2=-B2 -A2 :
[root@wolf1 /data]# grep -C2 '103' lidao.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
二、sed
1.含义:stream editor 流编辑器
- 每个文件 源源不断水流(一行接一行)
2.功能
增删查改
3.参数
-n
取消默认输出
-i
修改文件内容
-r
支持扩展
-i.bak
先备份文件为oldboy.txt.bak,然后修改文件
4.sed命令执行过程

sed执行过程.png
5.查:p查看(print)
1)根据行号查找
[root@wolf1 /data]# sed -n '3p' lidao.txt
103,Alex,COO
2)行号范围
[root@wolf1 /data]# sed -n '2,4p' lidao.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
3)使用正则进行过滤
[root@wolf1 ~]# sed -n '/oldboy/p' oldboy.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my god ,i am not oldbey,but OLDBOY! am oldboy teacher!
4)使用正则表示范围
[root@wolf1 /data]# sed -n '/102/,/104/p' lidao.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
6.增加
- a (append) 追加 在你指定行下增加内容
[root@wolf1 /data]# sed '3aoldboy' lidao.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
oldboy
104,yy,CFO
105,feixue,CIO
106,song,CTO
110,lidao,COCO
- i (insert) 插入 在你指定行的上面插入信息
[root@wolf1 /data]# sed '3i oldboy' lidao.txt
101,oldboy,CEO
102,zhangyao,CTO
oldboy
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,song,CTO
110,lidao,COCO
- c (replace)把这一行的内容先清空,然后写入
[root@wolf1 /data]# sed '3c oldboy' lidao.txt
101,oldboy,CEO
102,zhangyao,CTO
oldboy
104,yy,CFO
105,feixue,CIO
106,song,CTO
110,lidao,COCO
7.删除 --->d delete
1)删除/oldboy/oldboy.txt中的空行
[root@wolf1 ~]# sed '/^$/d' oldboy.txt
2)不显示文件/etc/ssh/sshd_config的空行或以#号开头的行
[root@wolf1 ~]# sed -n -E '/^$|^#/!p' /etc/ssh/sshd_config
8.修改
- s 替换
- g global
1)sed默认替换每一行的第1个内容(第一个匹配到的)
[root@wolf1 /data]# sed 's#101#100#' lidao.txt
100,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
2)如果有g则进行全局替换 替换每一行中匹配到的内容
[root@wolf1 /data]# sed 's#[0-9]#a#' lidao.txt
a01,oldboy,CEO
a02,zhangyao,CTO
a03,Alex,COO
a04,yy,CFO
9.后向引导
在见面(##)把你要的内容保护起来,在后两个##之间通过\数字来引用
先保护,在使用
[root@wolf1 /data]# echo 123456 | sed -r 's#(.)#<\1>#g'
<1><2><3><4><5><6>