所以我浏览了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
答案 0 :(得分:4)
使用perl正则表达式,你可以使用除空格之外的任何字符作为正则表达式分隔符,尽管
\w
中的字符(因此s 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
但那是丑陋的。
当使用大括号/ parens等时,正则表达式和替换之间可能有空格,允许使用美丽的代码,如
$string =~ s {foo}
{bar}g;
此上下文中另一个有趣的正则表达式选项是quotemeta
函数。如果您的搜索表达式包含许多通常用特殊含义解释的字符,我们可以将该字符串括在\Q...\E
中。所以
m{\Qx*+\E}
即使包含x*+
,'+'或*
等字符,也会匹配确切的字符串|
。
答案 1 :(得分:3)
您可以使用除“/”之外的其他字符来指定模式。例如:
perl -pi -w -e 's,path/to/file,new/path/to/file,g;' *.html
答案 2 :(得分:0)
perl -pi -w -e 's/path\/to\/file/new\/path\/to\/file/g;' *.html