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 正则表达式,您可以使用除空格以外的任何字符作为正则表达式分隔符,尽管

  • 中的字符\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*+,即使包括*、 '+'|等字符。

于 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 回答