1. 程式人生 > 實用技巧 >sed常用用法小結

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