Linux运维-day17-三剑客之sed

16955089-e58d30354fec7c64.png
image.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

16955089-428f8cd211aa520a.png
image.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

16955089-b09957cde815527a.png
image.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值