だから私は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
perl正規表現では、スペース以外の任意の文字を正規表現の区切り文字として使用できますが、
\w
(s 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*+
文字が含まれている場合でも、正確な文字列に一致します。*
|
'/'以外の文字を使用してパターンを指定できます。例えば:
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