Linux sed 命令字串替換使用方法詳解

pythontab發表於2018-07-12

sed是一種流編輯器,在linux文字處理中非常常用。它是文字處理中非常中的工具,能夠完美的配合正規表示式使用,功能不同凡響。處理時,把當前處理的行儲存在臨時緩衝區中,稱為“模式空間”(pattern space),接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。接著處理下一行,這樣不斷重複,直到檔案末尾。檔案內容並沒有 改變,除非你使用重定向儲存輸出。Sed主要用來自動編輯一個或多個檔案;簡化對檔案的反覆操作;編寫轉換程式等。

今天我們就來看來最常用的字串替換用法。


1. sed替換的基本語法

sed 's/原字串/替換字串/'

單引號裡面,s表示替換,三根斜線中間是替換的樣式,特殊字元需要使用反斜線”\”進行轉義。

2. 單引號” ‘ ’”是沒有辦法用反斜線”\”轉義的

這時候只要把命令中的單引號改為雙引號就行了, 這點和正規表示式類似, 格式如下:

# 要處理的字元包含單引號
sed "s/原字串包含'/替換字串包含'/"

3. 替換分隔符

命令中的三根斜線分隔符可以換成別的符號,有時候替換目錄字串的時候有較多斜線,這個時候換成其它的分割符是較為方便,只需要緊跟s定義即可。

# 將分隔符換成問號”?”:
sed 's?原字串?替換字串?'


4. 匹配關鍵字g

可以在末尾加g替換每一個匹配的關鍵字,否則只替換每行的第一個,例如:

# 替換所有匹配關鍵字
sed 's/原字串/替換字串/g'


5. 一些特殊字元的使用

”^”表示行首

”$”符號如果在引號中表示行尾,但是在引號外卻表示末行(最後一行)

  

# 注意這裡的 " & " 符號,如果沒有 “&”,就會直接將匹配到的字串替換掉
sed 's/^/新增的頭部&/g'      #在所有行首新增
sed 's/$/&新增的尾部/g'      #在所有行末新增
sed '2s/原字串/替換字串/g'  #替換第2行
sed '$s/原字串/替換字串/g'   #替換最後一行
sed '2,5s/原字串/替換字串/g' #替換2到5行
sed '2,$s/原字串/替換字串/g' #替換2到最後一行
sed 's/原字串/替換字串/2g'   #替換2到最後一行


6.批次替換字串

sed -i "s/查詢欄位/替換欄位/g" `grep 查詢欄位 -rl 路徑`
sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir


7. 輸出引數i

sed處理過的輸出是直接輸出到螢幕上的,使用引數”i”直接在檔案中替換。

# 替換檔案中的所有匹配項
sed -i 's/原字串/替換字串/g' filename


8. 多條替換命令表示

多個替換可以在同一條命令中執行,用分號”;”分隔,其格式為:

# 同時執行兩個替換規則
sed 's/^/新增的頭部&/g;s/$/&新增的尾部/g'


相關文章