1. 程式人生 > >Linux命令備忘例項(14)——sed

Linux命令備忘例項(14)——sed

sed是UNIX下非常重要的文字處理工具,是stream editor(流編輯器)的縮寫。這個命令配合正則表示式能夠處理非常強大的文字操作功能。其中眾所周知的用法就是文字替換。

1.概覽

sed [option] 'script'/scriptfile  inputfile

這裡寫圖片描述
sed可以替換給定文字中的字串,利用正則表示式進行匹配。

2.例項特性

1.基本替換

$ sed 's/pattern/replace_string' inputfile

2.原檔案替換

使用-i選項,可以將替換結果應用於原檔案,有很多使用替換後進行重定向的方式來進行,其實可以直接使用這個選項一步到位。

sed -i 's/text/replace' inputfile

3.全域性替換

預設情況下,sed只會每次讀取檔案的一行,然後找到匹配的第一處內容,然後進行替換。如果需要替換所有匹配的內容,那麼需要使用g選項。

sed  's/pattern/replace/g'  inputfile
$ echo "this thisthisthis" | sed 's/this/THIS/g'
THIS THISTHISTHIS

如果需要指定從匹配的第N處開始替換,可以使用如下的方式進行:

sed  's/pattern/replace/3g'  inputfile
$ echo "this thisthisthis"
| sed 's/this/THIS/2g' this THISTHISTHIS

4.其他

-f選項可以使用一個指令碼檔案來進行替換,-r選項可以指定使用擴充套件的正則表示式,-s使用多個檔案時,每個檔案視為單獨檔案而不是一個整體檔案。-u不使用文字流的緩衝。-z使用空白字元來分割每一行。

3.擴充套件

1.移除空白行

正則表示式後的d選項用來指定刪除匹配的內容。

$ sed '/^$/d' file

2.已匹配字串標記

在sed中,使用&標記已經匹配到的字串,這樣可以在替換字串中使用已匹配到的內容。

$ echo "this is an example" | sed 's/\w\+/[&]/g'
[this] [is] [an] [example]

3.匹配分組

使用正則表示式時,可以進行分組,其中&代表整個匹配到的字串,\n代表第n個分組匹配到的字串。

$ echo "this is digit 1" | sed 's/digit \(\d\)/\1/'
this is 1

4.組合多個表示式

$ sed 'expr1' | sed 'expr2' 等價於
$ sed 'expr1; expr2'

另外,sed表示式通常使用單引號,如果使用雙引號,會對錶達式裡面的變數進行求值。