【问题标题】:Find and replace text with slash characters用斜线字符查找和替换文本
【发布时间】:2012-08-27 15:09:26
【问题描述】:

所以我在 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

【问题讨论】:

  • 这和 ssh 有什么关系?

标签: regex string perl replace slash


【解决方案1】:

perl -pi -w -e 's/path\/to\/file/new\/path\/to\/file/g;' *.html

【讨论】:

    【解决方案2】:

    使用 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
    

    但这太丑了。

    当使用大括号/括号等时,正则表达式和替换之间可以有空格,从而允许像这样漂亮的代码

    $string =~ s {foo}
                 {bar}g;
    

    在这种情况下,另一个有趣的正则表达式选项是quotemeta 函数。如果您的搜索表达式包含许多通常会被解释为具有特殊含义的字符,我们可以将该字符串包含在 \Q...\E 中。所以

    m{\Qx*+\E}
    

    匹配确切的字符串x*+,即使包括*、'+'或|等字符。

    【讨论】:

      【解决方案3】:

      您可以使用“/”以外的其他字符来指定模式。例如:

      perl -pi -w -e 's,path/to/file,new/path/to/file,g;' *.html
      

      【讨论】:

        猜你喜欢
        • 2022-06-15
        • 1970-01-01
        • 1970-01-01
        • 2016-09-22
        • 2011-08-22
        • 2014-02-17
        • 1970-01-01
        • 2018-05-11
        相关资源
        最近更新 更多