1. 程式人生 > >五.sed附加命令

五.sed附加命令

mar evel first manager 取數 都是 employ 默認 manage

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附加命令