試試這個:
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。
您是否知道像sed這樣的有限狀態工具與HTML/XML等樹狀結構數據不匹配? –
你的grep語句是否輸出正確的文件名?你的sed語句是否在單個文件上工作?如果問題被隔離到sed,那麼你的問題可以簡化。 –