五.sed附加命令
1. 追加命令 a
使用命令a可以在指定位置的後面插入新行. 語法如下:
$ sed ‘[address] a the-line-to-append‘ input-file
比如在第2行後面追加一行:
$ sed ‘2 a 203,Jack Johnson,Engineer‘ employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager
203,Jack Johnson,Engineer
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
在employee.txt末尾追加一行:
$ sed ‘$ a 106,Jack Johnson,Engineer‘ employee.txt
sed也可以追加多行:
在匹配Jason的行後面追加兩行:
$ sed ‘/Jason/a\
203,Jack Jahnson,Engineer\
204,Mark Smith,Sales Engineer‘ employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager
203,Jack Jahnson,Engineer
204,Mark Smith,Sales Engineer
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
2. 插入命令 i
插入命令insert和追加命令類似,只不過是在指定位置之前插入行。語法如下:
sed ‘[address] i the-line-to-insert‘ input-file
具體命令不多講,和上面類似
3. 修改命令 c
修改命令change可以用新行取代舊行。
語法如下:
sed ‘[address] c the-line-to-change‘ input-file
具體命令不多講,完全類似
4.打印不可見字符 l
請註意,這命令是l(m,n,l中的l)不是i(不是h,i,j中的i)
命令l可以打印不可見的字符,比如制表符\t,行尾標誌$等
先建立測試文件:
$ cat tabfile.txt
fname First Name
lname Last Name
mname Middle Name
使用命令l,把制表符顯示為\t,行尾標誌顯示為$
$ sed -n ‘l‘ tabfile.txt
fname\tFirst Name$
lname\tLast Name$
mname\tMiddle Name$
如果在l後面指定了數字,那麽會在第n個字符處自動折行。
5.打印等號 =
命令=會在每一行後面顯示該行的行號。
打印所有行號:
$ sed ‘=‘ input-file
只打印1,2,3行的行號:
$ sed ‘1,3 =‘ input-file
打印包含關鍵字‘Jane‘的行的行號
$ sed ‘/Jane/ =‘ input-file
6.轉換字符, y
命令y根據對應位置轉換字符。
下面例子,把abcde換成對應的ABCDE.
$ sed ‘y/abcde/ABCDE/‘ employee.txt
7.操作多個文件
前面都是用sed命令操作單個文件,也可以同時操作多個文件。
$ sed -n ‘/root/ p‘ /etc/paswd /etc/group
8.退出sed, q
命令q終止正在執行的命令並退出sed.
之前提到sed的執行流程是: 讀取數據,執行命令,打印結果,重復循環。
當sed 遇到q命令,便立刻退出,當前循環中的後續命令不會被執行,也不會繼續循環。
9.從文件中讀取數據,r
在處理輸入文件時,命令r會從另外一個文件中讀取內容,並在指定的位置打印出來。例如:
$ sed ‘$ r log.txt‘ employee.txt
上面這條命令會讀取log.txt的內容,並在打印employee.txt最後一行之後,把讀取的內容打印出來。
也可以給命令r指定一個模式,下面的例子將讀取log.txt的內容,並且在匹配‘Raj‘的行後面打印出來。
$ sed ‘/Raj/ r log.txt‘ employee.txt
10. sed命令選項
-n 屏蔽默認輸出
-f 調用腳本文件
-e 指定多個命令
-i 修改輸入文件
-c -i修改輸入文件的同時,會把文件的擁有者也改變了。 但是-c不會修改文件的擁有者
-l 指定一行的長度,超過指定的長度會自動換行。
sed -n -l 20 ‘l‘ input-file.txt
sed -n ‘l 20‘ input-file.txt
上面兩個命令獲取相同的結果
五.sed附加命令