0

可能重复:
如何将 $1 与正则表达式中的数字连接起来

我正在尝试使用命令行中的简单正则表达式替换替换SomeText文件中的所有实例(在 Windows 上):SomeText2

perl -pi.bak -e "s/(SomeText)/$12/g" sometext.txt

这不起作用,因为没有$12选择。如何正确指示$1选择标记后没有空格?

4

3 回答 3

5

${1}

作为一般规则,在 Regexp 或内插字符串文字中,您可以{}在 any$@sigil 之后使用来明确界定您关心的变量的名称。

是的,正如@Mat 所说,如果您使用的是某种 Unix 系统,请使用单引号。

于 2012-11-14T16:51:50.473 回答
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}.

于 2012-11-14T16:57:11.120 回答
0

对于您的特定情况,您根本不需要使用捕获变量:

s/SomeText/SomeText2/g

有关变量插值的更一般问题的答案,请参阅 Dan 的回答。

于 2012-11-14T16:54:18.470 回答