至於其他人建議,在你的正則表達式的各種'/'
人物需要有'\'
轉義因爲Perl會讀他們爲結束s///;
過早,否則,導致一些錯誤刪除它。在處理這些問題時,你總是需要留意特殊的人物,因爲我看到你已經在各個時期完成了。
's/ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1\.0 Transitional//EN" "http://www\.w3\.org/TR/xhtml1/DTD/xhtml1-transitional\.dtd">//g'
可以更改一個s///;
您的分隔符別的東西,比如 s###
或s{}{}
幫助allieviate的問題,我一般推薦這樣做,如果你正在使用HTML。
即便如此,我仍然會盡量簡化正則表達式,儘可能多地爲應用程序提供實用性。由於像這樣的HTML可能會非常難以處理,請嘗試使用任何類型的正則表達式的非貪婪匹配,但使用<
和>
來捕獲特定標記。例如,您可以使用正則表達式,如本...
s{<!DOCTYPE .*?>}{}s
,有點explaind格式...
s{
<!DOCTYPE # opening doctype tag
\s # one whitepsace
.*? # anything (even newlines because of /s flag) non-greedily
> # until the first closing greater than
}{}xs; # x is ignore whitespace, s is have '.' match anything (even \n)
此示例使用/x
標誌置評出來,說明一切,但是如果你是在命令行上這樣做的話,這不是必須的。
我不能說你的問題的其餘部分,因爲我不熟悉shell命令,只對正則表達式部分。
爲什麼'/ g'有關係嗎?我沒有跨越許多HTML文檔有多個文檔類型。 – simbabque
我認爲g是全局的,所以如果找到的話它會替換一個文件中的多個實例。 – user1822148
這是我的觀點。文檔類型位於HTML文檔的頂部,只有一次。爲什麼試圖多次替換它,如果只有一個它的實例? – simbabque