2

だから私はStackoverflowを見回して、テキストの検索と置換が次のように機能することを理解しています。

perl -pi -w -e 's/www.example.com/www.pressbin.com/g;' *.html

ただし、検索して置換したいテキストがスラッシュのあるファイルパスである場合はどうなりますか?それではどうすればよいですか?

perl -pi -w -e 's/path/to/file/new/path/to/file/g;' *.html
4

3 に答える 3

4

perl正規表現では、スペース以外の任意の文字を正規表現の区切り文字として使用できますが、

  • \ws xfooxbarxと同じですs/foo/bar/)との文字
  • 疑問符 ?(暗黙的に一致のみをアクティブ化-1回限りの動作、非推奨)および
  • 一重引用符'...'(変数補間のターン)

避けるべきです。中かっこが好きです:

perl -pi -w -e 's{path/to/file}{new/path/to/file}g;' *.html

区切り文字は、それらがバランスの取れた中括弧であるか、適切にエスケープされている場合を除いて、それぞれの文字列内に出現しない場合があります。だからあなたまた言うことができます

perl -pi -w -e 's/path\/to\/file/new\/path\/to\/file/g;' *.html

しかし、それは醜いです。

中かっこ/親子などを使用する場合、正規表現と置換の間に空白が存在する可能性があり、次のような美しいコードが可能になります。

$string =~ s {foo}
             {bar}g;

このコンテキストでのもう1つの興味深い正規表現オプションはquotemeta関数です。検索式に、通常は特別な意味で解釈される多くの文字が含まれている場合は、その文字列をで囲むことができます\Q...\E。それで

m{\Qx*+\E}

、'+'などのx*+文字が含まれている場合でも、正確な文字列に一致します。*|

于 2012-09-02T17:58:46.460 に答える
3

'/'以外の文字を使用してパターンを指定できます。例えば:

perl -pi -w -e 's,path/to/file,new/path/to/file,g;' *.html
于 2012-09-02T17:59:35.133 に答える
0

perl -pi -w -e 's/path\/to\/file/new\/path\/to\/file/g;' *.html

于 2012-09-02T17:58:08.833 に答える