可能重复:
如何将 $1 与正则表达式中的数字连接起来
我正在尝试使用命令行中的简单正则表达式替换替换SomeText
文件中的所有实例(在 Windows 上):SomeText2
perl -pi.bak -e "s/(SomeText)/$12/g" sometext.txt
这不起作用,因为没有$12
选择。如何正确指示$1
选择标记后没有空格?
可能重复:
如何将 $1 与正则表达式中的数字连接起来
我正在尝试使用命令行中的简单正则表达式替换替换SomeText
文件中的所有实例(在 Windows 上):SomeText2
perl -pi.bak -e "s/(SomeText)/$12/g" sometext.txt
这不起作用,因为没有$12
选择。如何正确指示$1
选择标记后没有空格?
${1}
作为一般规则,在 Regexp 或内插字符串文字中,您可以{}
在 any$
或@
sigil 之后使用来明确界定您关心的变量的名称。
是的,正如@Mat 所说,如果您使用的是某种 Unix 系统,请使用单引号。
我认为,这最适合环视断言或\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}
.
对于您的特定情况,您根本不需要使用捕获变量:
s/SomeText/SomeText2/g
有关变量插值的更一般问题的答案,请参阅 Dan 的回答。