有人可以幫我運行下面的命令。我也試圖逃避單引號,但沒有運氣。Perl正則表達式單引號
perl -pi.bak -e 's/Object\.prototype\.myString='q'//' myfile.html
有人可以幫我運行下面的命令。我也試圖逃避單引號,但沒有運氣。Perl正則表達式單引號
perl -pi.bak -e 's/Object\.prototype\.myString='q'//' myfile.html
雙引號應該工作:
perl -pi.bak -e "s/Object\.prototype\.myString='q'//" myfile.html
您可能會或可能不希望對正則表達式一個g
修改。之後你可能會想要做一個diff
,以確保你沒有損壞HTML。
這是什麼對我有效。我想從變量'name'中刪除引號和一些其他字符(空格,括號, - ,。):prxchange(「s/| - | \。| \(| \)| \'//」 1,name) –
問題不在於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
就我而言,'\ x27'的建議似乎是最簡單可靠的 - 非常棒! – zeroasterisk
\ Q ... \ E也不起作用 – user1018279