使用斜杠字符查找和替换文本

时间:2012-09-02 17:54:38

标签: regex string perl replace slash

所以我浏览了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

3 个答案:

答案 0 :(得分:4)

使用perl正则表达式,你可以使用除空格之外的任何字符作为正则表达式分隔符,尽管

  • \w中的字符(因此s xfooxbarxs/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