sed常用用法小結
基礎用法
sed 選項 '處理規則' 處理文字
常用選項:
-e:預設:顯示原文字和處理後的文字
-n:安靜模式,即不顯示原文字,只顯示處理文字
-i:不顯示到螢幕,直接修改原文字
常用動作:
a:在指定行後面追加一行
i:在指定行前面插入一行
c:替換指定行為新行
d:刪除指定行
s:替換指定字元,可用正則表示式
p:列印指定行
命令詳解
以行為操作單位:sed 選項 'n1[,n2]動作' 文字 (其中n2可用$符表示最後一行)
以關鍵字為操作單位:sed 選項 '/關鍵字/動作' 文字
示例:
待處理文字test.txt內容如下:
Today's sky is gray,
Today's wind is cold,
Today's you is beautiful though,
I love you.
1.增加append
在第一行後增加一行:
sed '1a append line' test.txt
在第一至二行後增加一行:
sed '1,2a append line'test.txt
在第一至最後一行後增加一行:
sed '1,$a append line'test.txt
注意這裡sed處理規則用單引號包裹,可以直接用$符表示最後,若使用雙引號包裹,則必須要加反斜槓\轉義$符:
sed "1,\$aappend line" test.txt
在含有關鍵字you的所有行之後增加一行:
sed '/you/a append line'test.txt
2.插入insert
在第一行前增加一行:
sed '1i insert line'test.txt
在含有關鍵字you的所有行之前增加一行:
sed '/you/i insert line'test.txt
3.替換replace
替換第一行為新行:
sed '1c replace line'test.txt
替換所有含有關鍵字you的行為新行:
sed '/you/c replace line'test.txt
4.刪除delete
刪除第一行:
sed '1d'test.txt
刪除所有含關鍵字you的行:
sed '/you/d'test.txt
5.正則替換special characterreplace
將文字中所有的的字元s替換為S:
sed 's/s/S/g'test.txt
將文字中每一行首次匹配到的字元s替換為S:
sed 's/s/S/'test.txt
6.列印print
列印第一行:
sed '1p'test.txt
列印含有關鍵字you的所有行:
sed '/you/p' test.txt
以上動作都可以在sed命令後加上-i選項,使sed操作對原文字的修改生效(即把輸出到螢幕中的內容覆蓋原文字內容),雖然操作較為危險,但也是實際工作中最常使用的場景,尤其是動作s,而通常我們需要修改的是檔案中的一個或幾個特殊的僅有欄位,比如配置檔案中的引數值等。下面羅列幾個注意點:
1.指令碼中使用sed命令處理變數時需要使用雙引號,因為單引號會防止$符擴充套件:
sed -i "s/config/${new_config}/g" configfile
2.使用動作s按關鍵字搜尋時發現關鍵字中包含斜槓/,會與語法結構衝突,可以將語法中的斜槓/替換為其他字元,如@、#、&等(僅限於動作s):
sed -i "s@config@${new_config}@g"configfile
3.使用sed修改軟連結檔案時需要加--follow-symlinks引數從而不破壞軟連線檔案型別:
sed -i--follow-symlinks"s/config/${new_config}/g" soft_link_file
sed處理空行
以下都是不對原始檔file生效的情形,若想生效,加上-i選項。
1.刪除空行
單雙引號皆可:
sed '/^$/d' file
sed "/^$/d" file
2.將空行替換為指定文字
單雙引號皆可:
sed ''/^$/c a new line" file
sed '/^$/c a new line' file
3.將某一行替換為空行
單引號:
sed '1c \\' file
雙引號:
sed "1c \\\\" file
sed "1c \\\ " file
4.插入一行空行
以追加方式a為例
單引號:
sed '1a \\' file
雙引號:
sed "1a \\\\" file
sed "1a \\\ "file