2011-11-03 25 views
1

我用httrack製作了很多index.html文件。現在我想刪除與sed相同的2個添加元標記。如何使用sed刪除html元標記?

稱爲meta標籤:

<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=UTF-8"><!-- /Added by HTTrack --> 

我認爲這是編輯所有指數HTMLS的文件夾中recursiv的解決方案。

cd /home/user/websites 
grep -lr -e 'index' *.html | xargs sed -i 's/<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=UTF-8"><!-- /Added by HTTrack --> 
//g' 

它doesent的工作,請幫我 感謝

+0

您是否知道像sed這樣的有限狀態工具與HTML/XML等樹狀結構數據不匹配? –

+0

你的grep語句是否輸出正確的文件名?你的sed語句是否在單個文件上工作?如果問題被隔離到sed,那麼你的問題可以簡化。 –

回答

2

試試這個:

grep -lr -e 'index' *.html | xargs sed -i .bak -e 's#<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=UTF-8"><!-- /Added by HTTrack -->##g' 

如果要修改必須文件包含index這隻會然而工作。如果你想修改當前目錄下的所有文件index.html及其子目錄下使用:

find . -name 'index.html' | xargs sed -i .bak -e 's#<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=UTF-8"><!-- /Added by HTTrack -->##g' 

無論哪種方式,重要的是,在關於sed的指揮#更換/。只要您保持一致(即所有三個分隔符都是相同的字符),此命令允許您幾乎使用任何分隔符。你應該選擇沒有出現在表達式中的分隔符,或者你必須在那裏轉義它。

另請注意,我修改了標記爲sed。從SED手冊頁:

-i extension 
     Edit files in-place, saving backups with the specified extension. If a zero-length extension is given, no backup will be saved. It is not recom- 
     mended to give a zero-length extension when in-place editing files, as you risk corruption or partial content in situations where disk space is 
     exhausted, etc. 

-e command 
     Append the editing commands specified by the command argument to the list of commands. 

這意味着,我的命令將所有文件作爲備份保存修改之前,並追加「.bak的」備份文件的名稱。如果您不希望備份通過如下零長度擴展名:-i ''

通常,正則表達式不足以解析HTML。在這裏它的工作原理只是因爲你有一個固定的字符序列來替換剛剛發生的HTML。

+1

好的建議。另一種方法是轉義斜線,這是... \ \ \ \ \ \ \ \'...留下了一些需要的東西。 –

+0

非常感謝你的回答,聽起來不錯:)我會在晚上試試它....開心:) –