標籤:sed
sed:稱為流編輯器,也稱為行編輯器。
sed處理過程:sed讀取源檔案中的一行,並將其放在臨時緩衝區中,這個緩衝區稱為模式空間,使用相應的模式對模式空間進行處理,並將處理的結果顯示到螢幕上,並不會影響源檔案,處理結束後,將模式空間中的內容顯示至螢幕。
sed格式:
sed [options] ‘AddressCommand‘ file ...options:-n:靜默模式,不顯示模式空間中的內容,預設顯示預設空間中的內容。常和p命令一起使用。-i:直接修改源檔案的內容。-e ‘AddressCommand‘ -e ‘AddressCommand‘:同時執行多個指令碼。-f:指定sed指令檔的路徑。-r:預設情況下,sed只支援基本的Regex,如果要使用擴充運算式,需要用-r選項。
Address格式
1.StartLine,EndLine如:1,100:表示的是從第一行到第100行。$:表示的是最後一行。2./RegEXP/Regex。如:/^root/以root開頭的行。3./pattern1/,/pattern2/表示的是從第一次被pattern1模式比對的行開始,到第一次配patter2匹配的行結束,中間的所有行。4.LineNumber表示的一個指定的行號。5.StartLine,+N表示的是從startline行開始,向後的N行,總共N+1行,包括當前行和後面的N行。
Command格式
d:刪除合格行。p:顯示合格行。a \"string":在指定的行後面追加新行,內容為string。如果想追加多行的話,需要使用\n。
樣本:
[[email protected] tmp]# cat bond0 | sed ‘/USERCTL/a \Hello1\nHello2‘DEVICE=bond0BOOTPROTO=noneONBOOT=yesTYPE=EthernetIPADDR=172.17.100.252NETMASK=255.255.255.0GATEWAY=172.17.100.2USERCTL=noHello1Hello2IPV6INIT=yes[[email protected] tmp]#
i \string:在指定行的前面添加新行,內容為string。添加多行,使用\n。r file:在指定行的後面讀取file檔案的內容並添加到行後。w file:將指定範圍內的內容另存至file檔案中。s/pattern/string/ :將pattern匹配到的內容替換為string。只對每行中第一個被模式比對到的字串進行替換。s/pattern/string/g :將pattern匹配到的內容替換為string。對每行中的所有被匹配的模式進行替換。s/pattern/string/i :將pattern匹配到的內容替換為string,在尋找時,忽略大小寫。注意:s後面的/可以是分隔字元,其他的很多字元也都可以作為分隔字元,如s#root#frame#g這種格式。
pattern中的元字元
^:行首定位器。如/^my/表示匹配所有以my開始的行。$:行尾定位器。如/my$/表示匹配所有以my結尾的行。.:匹配除分行符號以外的任意單個字元。如/m..y/ 匹配包含字母m,後跟兩個任一字元,再跟字母y的行。*:表示匹配前一個字元出現0次或多次。如/my*/ 匹配包含字母m,後跟零個或多個y字母的行。[]:表示匹配範圍內的任意一個字元。如/[Mm]y/ 匹配包含My或my的行。[^]:表示匹配不再指定範圍外的任意一個字元。如/[^Mm]y/ 匹配包含y,但y之前的那個字元不是M或m的行。\(..\):儲存已匹配的字元。如1,20s/\(you\)self/\1r/ 標記元字元之間的模式,並將其儲存為標籤1,之後可以使用\1來引用它。最多可以定義9個標籤,從左邊開始編號,最左邊的是第一個。此例中,對第1到第20行進行處理,you被儲存為標籤1,如果發現youself,則替換為your。&:儲存尋找串以便在替換串中引用。如s/my/**&**/ 符號&代表尋找串。my將被替換為**my**\<:詞首定位器。如/\<my/ 匹配包含以my開頭的單詞的行。\>:詞尾定位器。如/my\>/ 匹配包含以my結尾的單詞的行。x\{m\}:連續m個x。如/9\{5\}/ 匹配包含連續5個9的行。x\{m,\}:至少m個x。如/9\{5,\}/ 匹配包含至少連續5個9的行x\{m,n\}。至少m個,但不超過n個x。如/9\{5,7\}/ 匹配包含連續5到7個9的行如下這些同樣可用:[:alnum:] [:alpha:] [:blank:] [:cntrl:][:digit:] [:graph:] [:lower:] [:print:][:punct:] [:space:] [:upper:] [:xdigit:]
本文出自 “HeZhang” 部落格,請務必保留此出處http://hezhang.blog.51cto.com/1347601/1435548