所以我在 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
(sos xfooxbarx
与 相同s/foo/bar/
) 和?
(隐式激活仅匹配一次行为,已弃用)和'...'
(变量插值的轮次)应该避免。我更喜欢花括号:
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;
在这种情况下,另一个有趣的正则表达式选项是quotemeta
函数。如果您的搜索表达式包含许多通常会被解释为具有特殊含义的字符,我们可以将该字符串包含在\Q...\E
. 所以
m{\Qx*+\E}
匹配确切的 string 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