天天看點

高效而輕松的sed指令

sed(stream editor)是一款高效的流編輯器,它一次隻處理一行内容,處理時,把目前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接着用sed指令處理緩沖區中的内容,處理完成後把緩沖區的内容送往螢幕,接着處理下一行,這樣不斷重複,直到檔案末尾。sed處理過的檔案内容并沒有改變,除非你使用重定向存儲輸出。

sed指令的使用規則

指令格式如下:

其中option是可選的,常用的option有如下幾種:

常用的指令有以下幾種:

指令示例 假設有一個本地檔案test.txt,檔案内容如下:

本節将使用該檔案詳細示範每一個指令的用法。

a指令

本例指令部分中的1表示第一行,同樣的第二行寫成2,第一行到第三行寫成1,3,用$表示最後一行,比如2,$表示第二行到最後一行中間所有的行(包含第二行和最後一行)。 本例的作用是在第一行之後增加字元串”add one”,從輸出可以看到具體效果。

本例表示在第一行和最後一行所有的行後面都加上”add one”字元串,從輸出可以看到效果。

本例表示在包含”first”字元串的行的後面加上字元串”add one”,從輸出可以看到第一行包含first,是以第一行之後增加了”add one”

本例使用正規表達式比對行,^ha.*day$表示以ha開頭,以day結尾的行,則可以比對到檔案的”happy everyday”這樣,是以在該行後面增加了”add one”字元串。

i指令

i指令使用方法和a指令一樣的,隻不過是在比對的行的前面插入字元串,是以直接将上面a指令的示例的a替換成i即可,在此就不啰嗦了。

c指令

本例表示将最後一行替換成字元串”add one”,從輸出可以看到效果。

本例将第四行到最後一行的内容替換成字元串”add one”。

本例将以ha開頭,以day結尾的行替換成”replace line”。

d指令

本例删除以ha開頭,以day結尾的行。

本例删除第四行到最後一行中的内容。

p指令

本例在螢幕上列印第四行到最後一行的内容,p指令一般和-n選項一起使用。

本例列印以ha開始,以day結尾的行。

s指令

實際運用中s指令式最常使用到的。

本例将檔案中的所有line替換成text,最後的g是global的意思,也就是全局替換,如果不加g,則隻會替換本行的第一個line。

本例首先比對以ha開始,以day結尾的行,本例中比對到的行是”happy everyday”這樣,然後再将該行中的happy替換成very happy。

這個例子有點複雜,先分解一下。首先s指令的模式是s/old/new/g這樣的,是以本例的old部分即\(.*\)line$,sed指令中使用\(\)包裹的内容表示正規表達式的第n部分,序号從1開始計算,本例中隻有一個\(\)是以\(.*\)表示正規表達式的第一部分,這部分比對任意字元串,是以\(.*\)line$比對的就是以line結尾的任何行。然後将比對到的行替換成正規表達式的第一部分(本例中相當于删除line部分),使用\1表示比對到的第一部分,同樣\2表示第二部分,\3表示第三部分,可以依次這樣引用。比如下面的例子:

正規表達式中is兩邊的部分可以用\1和\2表示,該例子的作用其實就是删除中間部分的is。

本文轉自Linux就該這麼學部落格園部落格,原文連結:http://www.cnblogs.com/linuxprobe/p/5377883.html,如需轉載請自行聯系原作者

繼續閱讀