2011-10-30 136 views

回答

6

雙引號應該工作:

perl -pi.bak -e "s/Object\.prototype\.myString='q'//" myfile.html 

您可能會或可能不希望對正則表達式一個g修改。之後你可能會想要做一個diff,以確保你沒有損壞HTML。

+0

這是什麼對我有效。我想從變量'name'中刪除引號和一些其他字符(空格,括號, - ,。):prxchange(「s/| - | \。| \(| \)| \'//」 1,name) –

14

問題不在於Perl,而在於你的shell。要看到發生了什麼,試試這個:

$ echo 's/Object\.prototype\.myString='q'//' 
s/Object\.prototype\.myString=q// 

要使其工作,你可以用'\''替換每個單引號,像這樣:

$ echo 's/Object\.prototype\.myString='\''q'\''//' 
s/Object\.prototype\.myString='q'// 

,或者你可以只寫節省幾個大字:

$ echo 's/Object\.prototype\.myString='\'q\''//' 
s/Object\.prototype\.myString='q'// 

甚至只是:

$ echo 's/Object\.prototype\.myString='\'q\'// 
s/Object\.prototype\.myString='q'// 

甚至:

$ echo s/Object\\.prototype\\.myString=\'q\'// 
s/Object\.prototype\.myString='q'// 

雙引號,因爲suggested by mu is too short,將在這裏工作過,但可以在其他情況下造成不必要的意外,因爲許多字符通常在Perl代碼中發現,像$!\,有甚至在雙引號內的shell的特殊含義。

當然,另一種解決方案是與八進制或十六進制代碼\047\x27而不是更換您的正則表達式的單引號:

$ perl -pi.bak -e 's/Object\.prototype\.myString=\x27q\x27//' myfile.html 
+0

就我而言,'\ x27'的建議似乎是最簡單可靠的 - 非常棒! – zeroasterisk