2010-06-08 59 views
1

我有嵌套的子目錄包含html文件。對於每一個HTML文件我想從文件的頂部刪除,直到模式<div id="left- 這是我嘗試從OSX的終端:遞歸多行sed - 刪除文件開頭,直到模式匹配

find . -name "*.html" -exec sed "s/.*?<div id=\"left-col/<div id=\"left-col/g" '{}' \; 

我得到了很多的termainal HTML輸出,但沒有文件包含替換或寫入。

回答

4

您的命令有兩個問題。第一個問題是您沒有爲sed選擇輸出位置。第二個問題是您的sed腳本沒有做到您想要的功能:您發佈的腳本將查看每行並刪除<div>之前的所有內容。沒有<div>的線路將不受影響。你可能也想嘗試:

find . -name "*.html" -exec sed -i.BAK -n "/<div id=\"left-col/,$ p" {} \; 

這也將自動追加到.BAK原始版本備份文件。如果這是不可取的,請將-i.BAK更改爲-i

+0

感謝,中獎,出於興趣,是否有一個簡單的方法切換後刪除,而不是之前? – 2010-06-08 17:11:13

+0

是的,只需將'sed'字符串更改爲'「1,/ yourpattern/p」'。你可以用'「/ startpattern /,/ stoppattern/p」'同時執行這兩個操作。 – VeeArr 2010-06-08 17:14:00

+0

謝謝 - 頂層抽屜 – 2010-06-08 17:22:31

0

您不在任何地方存儲sed的輸出;這就是爲什麼它吐出了HTML。

1

當您想要將它寫入文件時,您正在輸出sed正則表達式的結果至控制檯stdout

要執行查找和替換SED,使用-i標誌:

find . -name "*.html" -exec sed -i "s/.*?<div id=\"left-col/<div id=\"left-col/g" '{}' \; 

如果可能的話,在執行此命令之前,請確保您備份你的文件。否則,你可能會錯誤地輸入錯誤的正則表達式。

+0

嗯,我得到一個很長的文件名列表和'sed:1:「./foo/bar ...」:無效的命令代碼。'與那 – 2010-06-08 15:59:44