Sed是stream editor(流编辑器)是操作,过滤和转换文本内容的强大工具。常用功能有增删改查,过滤,取行。

增:

追加文本到指定行后          a

插入文本                            i

例子:单行增加

[root@localhost ~]# sed '2a 107,dandan' test.txt

124567668

dfgjkllkjhvkl

107,dandan

Adsfkadsjf

[root@localhost ~]# sed '2i 107,dandan' test.txt

124567668

107,dandan

dfgjkllkjhvkl

adsfkadsjf

一个是追加,一个是插入

多行增加 \n换行

[root@localhost ~]# sed '2i 107,dandan\naasdfasdf' test.txt

124567668

107,dandan

aasdfasdf

dfgjkllkjhvkl

adsfkadsjf

企业案例:

在我们学习系统优化时,有一个优化点:更改ssh服务远程登录的配置。主要的操作是在ssh的配置文件中加入下面五行文本

  1. Port 52113
  2. PermintRootLogin no
  3. PermitEmptyPasswords no
  4. UseDNS no
  5. GSSAPIAuthentication no

删除指定行    d

不指定几行,默认全部删除

按行替换

用新行取代旧行          c

文本替换

Sed -I ‘s###g’ #就是定界符

如果没有g,就是不是全局替换,g是全局都会改变

Sed -r使用扩展正则表达式,(.*) \1

&做替换批量重命名文件

[root@localhost ~]# cd /test
[root@localhost test]# ls
[root@localhost test]# touch stu_102999_{1..5}_finished.jpg
[root@localhost test]# ls
stu_102999_1_finished.jpg  stu_102999_3_finished.jpg  stu_102999_5_finished.jpg
stu_102999_2_finished.jpg  stu_102999_4_finished.jpg
[root@localhost test]# ls  *.jpg
stu_102999_1_finished.jpg  stu_102999_3_finished.jpg  stu_102999_5_finished.jpg
stu_102999_2_finished.jpg  stu_102999_4_finished.jpg
[root@localhost test]# ls  *.jpg | sed -r 's#(^.*)_finished.*#mv & \1.jpg#g'
mv stu_102999_1_finished.jpg stu_102999_1.jpg
mv stu_102999_2_finished.jpg stu_102999_2.jpg
mv stu_102999_3_finished.jpg stu_102999_3.jpg
mv stu_102999_4_finished.jpg stu_102999_4.jpg
mv stu_102999_5_finished.jpg stu_102999_5.jpg
[root@localhost test]# ls  *.jpg | sed -r 's#(^.*)_finished.*#mv & \1.jpg#g' |bash
[root@localhost test]# ls
stu_102999_1.jpg  stu_102999_2.jpg  stu_102999_3.jpg  stu_102999_4.jpg  stu_102999_5.jpg

查:

输出指定内容  p 但是默认会输出2次匹配的结果,因此使用n取消默认输出

[root@localhost ~]# sed '2p' test.txt
124567668
dfgjkllkjhvkl
dfgjkllkjhvkl
adsfkadsjf
[root@localhost ~]# sed -n '2p' test.txt
Dfgjkllkjhvkl
2-3行
[root@localhost ~]# sed -n '2,3p' test.txt
dfgjkllkjhvkl
adsfkadsjf

1~2p就是取1,3,5,奇数行显示所有奇数行

命令的执行df -h == echo ‘df -h’ | bash

02-13 08:33