sed 替換跨行內容

2021-05-27 21:02:19 字數 1116 閱讀 8853

sed是*nix下方便的行編輯工具,經常用來替換檔案的內容,sed一般都是處理單行的,但通過它的一些內建功能,也能實現跨行替換(即要替換的內容有多行內容)。

解決方法主要來自網上搜到的一篇文章,但文中的大俠並沒有解釋得特別清楚,我對照著其他兩個更晦澀的例子(一、二),結合man搞懂了之後,記錄於此。

假設我們的目標檔案test內容是這樣的:

file content

aabbcc<<>>

ddeeff

現在需要把[[[...]]]這一段替換為「comment」(為了說明的必要,沒有用容易和正則相混淆的字元比如//*{}等來舉例子),那麼sed語法應當是:

:begin

/<<>>/

}s/<<<.*>>>/comment/;

}

上述語句儲存在test.sed中,那麼執行的方式和結果就是:

$ sed -f test.sed test

file content

aabbcccomment

ddeeff

把正則直接寫到命令裡面也可以,用「;」來分隔命令即可:

$ sed -e ":begin; /<<>>/ ; }; s/<<<.*>>>/comment/; };" test

file content

aabbcccomment

ddeeff

注意右花括號之後也要加上分號「;」,如果再加上-i引數就可以直接把改動寫到原檔案中去了。

怎麼樣?看懂了麼?我來詳細說明吧,看那個多行命令的test.sed檔案的內容:

介紹完畢,收工。

update @ 2007-12-14

在和bxy討論的過程中,又發現sed的另外一種用途,從html或xml中按照tag對應關係,篩選列印出指定的tag內容,使用了正則中的p命令,好像預設就沒有「不能處理多行內容」以及「貪婪性」的問題,很好用,很強大:

$ sed -n -e '//p' -e '//p' from.xml
注意//不在同一行的時候才好用,不然會匹配到下乙個例項出現的位置作為結束邊界。

shell 檔案內容替換 sed用法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!呼叫sed命令有兩種形式 sed options command file s sed options f scriptfile file s 刪除 d命令 sed 2d example 刪除example檔案的第二行。sed 2,d exampl...

Shell 檔案內容替換 sed用法

sed是乙個很好的檔案處理工具,本身是乙個管道命令,主要是以行為單位進行處理,可以將資料行進行替換 刪除 新增 選取等特定工作,下面先了解一下sed的用法。呼叫sed命令有兩種形式 sed options command file s sed options f scriptfile file s ...

sed直接替換檔案內容

sed i s zhangsan lisi g grep zhangsan rl modules 解釋一下 i 表示inplace edit,就地修改檔案 r 表示搜尋子目錄 l 表示輸出匹配的檔名 這個命令組合很強大,要注意備份檔案。1 sed y 1234567890 abcdefghij te...