Linux文本處理三劍客之sed

  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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章