Linux运维-day17-三剑客之sed
2019-04-18 本文已影响15人
文娟_狼剩
![](https://img.haomeiwen.com/i16955089/e58d30354fec7c64.png)
Linux三剑客的功能:
grep:过滤
sed:过滤、替换(修改)、增删改查
awk:过滤 取列 统计计算
1、grep
作用:过滤
参数:
-i:(ignore case)过滤的时候不区分大小写
-v:取反
-n:显示行号
-w:按照单词进行过滤
-o:显示过程(显示每次grep匹配的内容)
-E:支持扩展正则表达式,常用egrep
-c:统计包含xxx一共多少行
-l(小写字母L):grep过滤的时候只显示文件名,不显示文件内容
如:在系统中找出包含oldboy的文件(只想要文件名)
-R:递归进行过滤
grep -Rl 'oldboy' /oldboy/ /tmp/
注:-R后面可以接多个目录(尽量不要从根下找,否则会报错)
-A:相当于after
显示grep找出的内容及接下来的几行
-B:相当于before
显示grep找出的内容及上面的几行
-C:-c2====-A2 -B2
配置环环境:
cat >>/oldboy/oldboy.txt<<EOF
oldboy
oldboya
oldboyoldboy
alexoldboy
EOF
在系统中找出包含oldboy的文件(只想要文件名)
[root@oldboyedu59 ~]# find /oldboy/ -type f |xargs grep -l 'oldboy'
/oldboy/id.txt
/oldboy/oldboy.txt
[root@oldboyedu59 ~]#
找出指定目录下的所有包含oldboy的文件(只想要文件名)
[root@oldboyedu59 ~]# grep -Rl 'oldboy' /oldboy/ /tmp/
/oldboy/id.txt
/oldboy/oldboy.txt
[root@oldboyedu59 ~]#
2、sed(stream editor):流编辑器
每个文件 源源不断水流(一行接一行)
功能:增删改查
sed命令的执行过程:※※※※
https://www.processon.com/view/link/5bea32c5e4b0ad314e894f53
![](https://img.haomeiwen.com/i16955089/428f8cd211aa520a.png)
配置环境:
[root@oldboyedu59 /oldboy]# cat >>lidao.txt<<EOF
> 101,oldboy,CEO
> 102,zhangyao,CTO
> 103,Alex,COO
> 104,yy,CFO
> 105,feixue,CIO
> 110,lidao,COCO
> EOF
参数:
-n 取消默认输出
-i 修改文件内容
-i.bak 先备份文件,然后在修改文件内容(默认备份的当前目录下)
-r:支持扩展正则
1>sed查询※※※※
p (print)查看
- 根据行号进行查找
- 行号范围进行查找
- 使用正则进行过滤
- 使用正则进行查找范围
查询lidao文件中的第3行的内容
[root@oldboyedu59 /oldboy]# sed -n '3p' lidao.txt
103,Alex,COO
查询lidao文件中第1行到第5行的内容
[root@oldboyedu59 /oldboy]# sed -n '1,5p' lidao.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@oldboyedu59 /oldboy]#
找出文件中包含oldboy或yy的行
[root@oldboyedu59 /oldboy]# sed -nr '/oldboy|yy/p' lidao.txt
101,oldboy,CEO
104,yy,CFO
[root@oldboyedu59 /oldboy]#
找出lidao文件中从102开始到105结束的内容
[root@oldboyedu59 /oldboy]# sed -n '/102/,/105/p' lidao.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@oldboyedu59 /oldboy]#
2>sed增加※※※※
a:(append)追加到指定行的后面;如:sed '3aoldboy' lidao.txt
i:(insert)在指定的行上面插入信息
c:(replace)把这一行的内容先清空,然后写入
使用a在第7行的后面插入一行,通过-i参数进行修改
[root@oldboyedu59 /oldboy]# sed -i '7a107,yang,UFO' lidao.txt
[root@oldboyedu59 /oldboy]# cat lidao.txt
101,oldboy,CEO
102,zhangyao,CTO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
105,feixue,CIO
107,yang,UFO
110,lidao,COCO
使用a在第8行的后面插入一行,通过-i.bak参数先备份,再进行修改
[root@oldboyedu59 /oldboy]# sed -i.bak '8a108,yang,UFO' lidao.txt
[root@oldboyedu59 /oldboy]# cat lidao.txt
101,oldboy,CEO
102,zhangyao,CTO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
105,feixue,CIO
107,yang,UFO
108,yang,UFO
110,lidao,COCO
使用i再第3行的上面插入一行,通过-i.bak参数先备份,再进行修改
[root@oldboyedu59 /oldboy]# sed -i.bak '3i1234,oldboy,HF' lidao.txt
[root@oldboyedu59 /oldboy]# cat lidao.txt
101,oldboy,CEO
102,zhangyao,CTO
1234,oldboy,HF
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
105,feixue,CIO
107,yang,UFO
108,yang,UFO
110,lidao,COCO
[root@oldboyedu59 /oldboy]#
使用c将第3行的内容进行修改,通过-i.bak参数先备份,再进行修改
[root@oldboyedu59 /oldboy]# sed -i.bak '3c102,ff,HK' lidao.txt
[root@oldboyedu59 /oldboy]# cat lidao.txt
101,oldboy,CEO
102,zhangyao,CTO
102,ff,HK
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
105,feixue,CIO
107,yang,UFO
108,yang,UFO
110,lidao,COCO
3>sed删除※※※※
d:(delete)删除
删除 /oldboy/oldboy.txt中的空行
sed '/^$/d' lidao.txt
不显示 /oldboy/oldboy.txt中的空行
sed -n '/^$/!p' oldboy.txt
grep -v '^$' oldboy.txt
awk '!/^$/' oldboy.txt
不显示文件/etc/ssh/sshd_config 的空行或以#号开头的行
egrep -v '^$|^#' /etc/ssh/sshd_config
sed -nr '/^$|^#/!p' /etc/ssh/sshd_config
sed -r '/^$|^#/d' /etc/ssh/sshd_config
awk '!/^$|^#/' /etc/ssh/sshd_config
4>修改(sub)※※※※
格式:sed 's#目标#替换为什么#g' oldboy.txt
如:sed 's#oldboy#alex#g' oldboy.txt
s:替换
g:(global)全局替换
sed默认替换每一行的第1个内容(第1个匹配到的)
如果有g则进行全局替换,替换每一行中匹配到的内容
后向引用
在前面(##)把你要的内容保护起来,在后连个##之间通过\数字来引用(先保护,在引用)
后向引用的应用例子:
[root@oldboyedu59 /oldboy]# echo 123456 |sed -r 's#(.*)#<\1>#g'
<123456>
[root@oldboyedu59 /oldboy]# echo 123456 |sed -r 's#(..)(..)(..)#\1<\2>\3#g'
12<34>56
[root@oldboyedu59 /oldboy]# echo 123456 |sed -r 's#(.)#<\1>#g'
<1><2><3><4><5><6>
sed命令格式和功能
https://www.processon.com/view/link/5cb7ede9e4b01941c8b13036
![](https://img.haomeiwen.com/i16955089/b09957cde815527a.png)