day 17 三剑客之sed

一、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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容