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的配置文件中加入下面五行文本
- Port 52113
- PermintRootLogin no
- PermitEmptyPasswords no
- UseDNS no
- 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