3

エスケープされた括弧を含むファイルがある場合、Perl を使用してすべてのインスタンスをエスケープされていない括弧に置き換えるにはどうすればよいですか?

つまり、これを回します:

.... foo\(bar ....

これに

.... foo(bar ....

次のことを試しましたが、次のエラー メッセージが表示されました。

perl -pe "s/\\\(/\(/g" ./file
Unmatched ( in regex; marked by <-- HERE in m/\\( <-- HERE / at -e line 1.
4

3 に答える 3

11

バックスラッシュがシェルにとっても何かを意味することを忘れています。二重引用符の代わりに単一引用符を使用してみてください。(または、スクリプトをファイルに入れてください。シェルの引用について心配する必要はありません。)

于 2009-02-19T21:55:01.417 に答える
6

ガッ。コマンドラインからも同様です。メタキャラクターの解釈のレベルが多すぎます。

二重引用符を一重引用符に置き換えてみてください。それが役立つかどうかを確認してください。

于 2009-02-19T21:55:08.530 に答える
0

cjmの 答えはおそらく最高です。コマンドラインで実行する必要がある場合は、quotemeta()またはメタ引用エスケープシーケンス (\ Q ... \ E)を使用してみてください。これはbashプロンプトで私のために働きました:

perl -pe "s/\Q\(\E/(/g" ./file
于 2009-02-20T03:15:21.800 に答える