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