我正在尝试使用SomeText
替换文件中SomeText2
的所有实例,使用命令行中的简单正则表达式替换(在Windows上):
perl -pi.bak -e "s/(SomeText)/$12/g" sometext.txt
这不起作用,因为没有$12
选择。如何在没有空格的情况下正确指出$1
选择标记?
答案 0 :(得分:5)
${1}
作为一般规则,在Regexp或插值字符串文字中,您可以在任何{}
或$
sigil之后使用@
来明确界定您关注的变量的名称。
是的,正如@Mat所说,如果您使用的是某种类型的Unix系统,请使用单引号。
答案 1 :(得分:2)
我认为,这最适合于环视断言或\K
转义:
perl -pi.bak -e "s/SomeText\K/2/g" sometext.txt
或者使用后视断言:
perl -pi.bak -e "s/(?<=SomeText)/2/g" sometext.txt
这样可以防止移除\K
之前或后视镜内的任何内容,因此您无需将其放回原位。
您还可以对变量使用长语法,即使用${name}
,即${1}
。
答案 2 :(得分:0)
对于您的具体情况,您根本不需要使用捕获变量:
s/SomeText/SomeText2/g
关于变量插值的更一般问题的答案,请参阅Dan的答案。