2011-10-30 19 views
8

以下のコマンドを実行するのに何か助けてもらえますか?私も一重引用符をエスケープしようとしましたが運はありません。Perl正規表現シングルクォート

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

\ Q ... \ Eも – user1018279

答えて

6

二重引用符は動作するはずです:あなたがまたはその正規表現にg修飾子をたくない場合があり

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

。そして、おそらくdiffを実行して、HTMLをマングルしていないことを確認してください。

+0

を動作しません。これは、何が私のために働いた。 prxchange( "s/| - | \。| \(| \)| \" // "、 - )という変数から引用符と他の文字(スペース、カッコ、 1、name) –

14

問題はPerlではなく、シェルで問題になります。何が起こっているかを確認するには、これを試してみてください。

$ 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コードで見つかったことから、他の状況での不要な驚きを引き起こす可能性があります持っています二重引用符で囲んだ場合でもシェルに特別な意味があります。

もちろん

、代替ソリューションが進または16進コードの代わり\047\x27であなたの正規表現での単一引用符を置き換えることです:

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

私の場合、 '\ x27'の推奨事項は最もシンプルで信頼できると思われます。 – zeroasterisk