如何使用perl替换文件中的String?
perl -pi -e 's/Arun/Brun/g' *
这对我来说很好
但是当我尝试将class/students/a
更改为class1/students1/B
时,它会抛出错误如何解决此问题..我尝试在每个{\
之前添加反斜杠(/
) )但它没有帮助
perl -pi -e 's/class/students/a/class1/students1/B/g' *
答案 0 :(得分:12)
您使用/
作为正则表达式分隔符。
即使在模式和替换中也有/
。您需要以某种方式确保不应将这些/
视为分隔符。
您有两种选择:
以模式和替换中的/
退出:
perl -pi -e 's/class\/students\/a/class1\/students1\/B/g' *
或者使用不同的分隔符:
perl -pi -e 's#class/students/a#class1/students1/B#g' *
首选方法2,因为它可以保持正则表达式简短和清理。
答案 1 :(得分:8)
尝试perl -pi -e 's{class/students/a}{class1/students1/B}g' *
任何非空白分隔符都可以 替换斜杠。之后添加空格 使用允许的角色时的s 在标识符中。 (...)如果 PATTERN由包围区分 引用,REPLACEMENT有自己的 引号,可能会也可能不会 包括引号,例如, s(foo)(bar)或s / bar /.
答案 2 :(得分:0)
谢谢perldoc perlop:
我的问题是changin Oracle Home已经通过您的命令解决了。我用shell变量替换的另一个技巧。
export ORACLE_HOME=/oracle/product/11.2.0.3/db_1
perl -pi -e 's{REPLACEWITHORACLEHOME}{'$ORACLE_HOME'}g' filename
更多脚本方式是:
for y in `ls`;do perl -pi -e 's{REPLACEWITHORACLEHOME}{'$ORACLE_HOME'}g' $y;done