如何使用Perl替换文件中具有转义序列的String?

Aru*_*lam 5 regex string perl

如何使用perl替换文件中的String?

perl -pi -e 's/Arun/Brun/g' *
Run Code Online (Sandbox Code Playgroud)

这对我来说很好

但是,当我试图改变class/students/aclass1/students1/B它抛出错误怎么解决这个问题..我尝试添加反斜杠(\每前)( /),但它并没有帮助

perl -pi -e 's/class/students/a/class1/students1/B/g' *
Run Code Online (Sandbox Code Playgroud)

cod*_*ict 12

您正在使用/正则表达式分隔符.
还有/,即使在你的模式更换.您需要以某种方式确保/不应将这些视为分隔符.

您有两种选择:

  1. 逃离/您的模式替换为:

    perl -pi -e 's/class\/students\/a/class1\/students1\/B/g' *
    
    Run Code Online (Sandbox Code Playgroud)
  2. 或者使用不同的分隔符:

    perl -pi -e 's#class/students/a#class1/students1/B#g' *
    
    Run Code Online (Sandbox Code Playgroud)

方法2是首选,因为它让你的正则表达式清洁.


Eug*_*ash 8

尝试 perl -pi -e 's{class/students/a}{class1/students1/B}g' *

来自perldoc perlop:

任何非空白分隔符都可以替换斜杠.使用标识符中允许的字符后,在s后添加空格.(...)如果PATTERN由括号引号分隔,则REPLACEMENT有自己的引号对,可能包括或不包括引号,例如s(foo)(bar)或s/bar /.