コマンドライン検索でエスケープ文字を検索して置き換えます。 [重複]

コマンドライン検索でエスケープ文字を検索して置き換えます。 [重複]

Unix(MacOS High Sierraを実行)では、次のような検索/置換(複数のファイルから)へのいくつかの異なるアプローチを見ました。

perl -pi -w -e 's/SEARCH_FOR/REPLACE_WITH/g;' *.txt

sedまたはgrepなどを使用してください。問題は、検索文字列を正しくエスケープする方法です。たとえば、http://my.site/dirに置き換える必要がある場合は、http://new.my.site/dirエスケープしないと検索文字列にスラッシュを含めることはできません。

ベストアンサー1

具体的には、このコマンドを使用すると、Perlをs///演算子として使用すると別の区切り文字を選択できるため、/何もエスケープする必要がなくなり、作業が簡単になります。

したがって、以下が機能します。

perl -pi -w -e 's!http://my.site/dir!http://new.my.site/dir!g;' *.txt

!ソース文字列または代替文字列に表示されない限り、他の任意の文字を使用できます。さらに、「スクリプト」全体がそのコンテンツの下にあるため、シェルはそれを解析しないため、シェルなどによる'コンテンツの補間からも保護されます。$

バラよりhttps://perldoc.perl.org/perlop.html#Quote-and-Quote-like-Operatorsすべての詳細を確認してください。

おすすめ記事