天天看點

sed 字元串替換

1. sed替換的基本文法為:

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

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

2. 單引号” ‘ ’”是沒有辦法用反斜線”\”轉義的,這時候隻要把指令中的單引号改為雙引号就行了,格式如下:

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

3. 指令中的三根斜線分隔符可以換成别的符号,有時候替換目錄字元串的時候有較多斜線,這個時候換成其它的分割符是較為友善,隻需要緊跟s定義即可。

# 将分隔符換成問号”?”:
sed 's?原字元串?替換字元串?'      

4. 可以在末尾加g替換每一個比對的關鍵字,否則隻替換每行的第一個,例如:

# 替換所有比對關鍵字
sed 's/原字元串/替換字元串/g'      

5. 一些特殊字元的使用

  ”^”表示行首

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

  

sed 字元串替換
# 注意這裡的 " & " 符号,如果沒有 “&”,就會直接将比對到的字元串替換掉
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 字元串替換

利用sed指令在比對某特定字元串的行尾添加字元串

思路是,先比對,後查找替換 

例如:把txt檔案中包含test行的行尾添加 ‘000’

sed -i '/test/ s/$/000/'

sed使用變量的問題

網上有人總結了四種方案:

1.       eval sed 's/$a/$b/' filename

2.       sed "s/$a/$b/" filename

3.       .sed 's/'$a'/'$b'/' filename

4.       .sed s/$a/$b/ filename

我比較喜歡第二種,也就是:Sed後面的表達式一般用單引号引起來('),當需要使用變量時就換用雙引号(")。

關于單雙引号的差別:

單引号:shell處理指令時,對其中的内容不做任何處理。即此時是引号内的内容是sed指令所定義的格式。

雙引号:shell處理指令時,要對其中的内容進行算術擴充。如果想讓shell擴充後得到sed指令所要的格式,使用指令:sed -n "/\\\\$/p" haha,擴充後得到的結果即\\$.

6.批量替換字元串

sed -i "s/查找字段/替換字段/g" `grep 查找字段 -rl 路徑`
sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir      
# 替換檔案中的所有比對項
sed -i 's/原字元串/替換字元串/g' filename      
# 同時執行兩個替換規則
sed 's/^/添加的頭部&/g;s/$/&添加的尾部/g'