sed是stream editor(流編輯器)的縮寫,是linux中文本處理非常重要的工具。它一次處理一行內容,處理時,把當前處理的行存儲在臨時緩衝區中,稱爲“模式空間”(pattern space),接着用sed命令處理模式空間中的內容,處理完成後,把緩衝區的內容輸出,接着處理下一行,這樣不斷重複,直到文件末尾。文件內容並沒有改變,因爲這些都在模式空間處理的。sed可以用來自動編輯一個或多個文件。
命令格式
sed [options] [command] file(s)
[option] 選項
-n: 僅顯示處理後的結果;
-i: 直接修改讀取的文件內容,而不是輸出到終端;
-e <script>: 以選項中的指定的script來處理輸入的文本文件;
-f <script file>: 以選項中指定的script文件來處理輸入的文本文件;
[command] 命令
a: 新增,在當前行下面插入文本;
c: 取代, 把選定的行改爲新的文本;
d: 刪除,刪除選擇的行;
i: 插入, 在當前行上面插入文本;
p: 打印,打印選擇行數據,通常與sed -n一起使用;
s: 替換,替換指定字符串,通常與正則表達式一起使用;
用法實例
替換操作
將file文件中每一行第一個的oldStr替換成newStr
sed 's/oldStr/newStr/' file
使用後綴g標記會替換每一行中的所有匹配
sed 's/oldStr/newStr/g' file
-n選項和p命令一起使用表示只打印那些發生替換的行
sed -n 's/oldStr/newStr/p'
當需要從第N處匹配開始替換時,可以使用 /Ng
echo testtesttesttest | sed 's/test/TEST/2'
testTESTtesttest
定界符
其中 / 在sed中作爲定界符使用,也可以使用任意的定界符:
sed 's|oldStr|newStr|' file
sed 's:oldStr:newStr:' file
定界符出現在樣式內部時,需要進行轉義:
echo /bin | sed 's/\/bin/\/usr\/local\/bin/g'
/usr/local/bin
刪除操作
刪除空白行:
sed '/^$/d' file
刪除文件的第2行:
sed '2d' file
刪除文件的第2行到第5行:
sed '2,5d' file
刪除文件中所有開頭是test的行:
sed '/^test/'d file
多點編輯
-e選項允許在同一行裏執行多條命令。先刪除1至5行,再用test替換TEST:
sed -e '1,5d' -e 's/test/TEST/' file
從文件讀入
file裏的內容被讀進來,顯示在與test匹配的行後面,如果匹配多行,則file的內容將顯示在所有匹配行的下面:
sed '/test/r file' filename
寫入文件
在example中所有包含test的行都被寫入file裏
sed -n '/test/w file' example