Linux命令備忘例項(14)——sed
阿新 • • 發佈:2019-02-02
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表示式通常使用單引號,如果使用雙引號,會對錶達式裡面的變數進行求值。