我需要在工作目录中的所有.txt文件中查找/替换以下字符串:
myfunc(l_define,'BASE TABLE')
我尝试了以下操作,它运行时没有错误,但不更新文件。
perl -pi -w -e "s/myfunc(l_define,'BASE')/myfunc(l_define,'BASE',1,1,'')/g;" *.txt
这是一个引用问题吗?
答案 0 :(得分:2)
在正则表达式中,(
和)
之间的内容是捕获组。
因此,对于(
或)
个字符,您需要转义它们,以便匹配文字字符。因此,在正则表达式中使用\(
和\)
。
因此,像func(akes)
这样的正则表达式只匹配funcakes
。
通常需要转义以匹配正则表达式语法中具有特殊含义的字符:
. ( ) [ ] + * ? { } ^ $ \ |
如果代码使用类似/
的内容而非类似s/a\/b/a-b/g
s@a/b@a-b@g
如果你真的不喜欢使用那些反斜杠?
您还可以使用字符类:[(]
和[)]