Perl 正则表达式识别多个字符串

Perl 正则表达式识别多个字符串

我有一个文件~/foo.txt,其中包含以下每个字符串的实例

alpha-1
alpha-2
alpha-3
alpha-4
alpha-5
alpha-6
alpha-7
alpha-8
alpha-9

我想将其中每一个替换alpha-Xbeta-X.简单地替换alpha-beta-是不够的,因为alpha-我想保留其他实例。

我想这可以通过类似的事情来完成

perl -p -i -e `s/alpha-SOMETHING/beta-SOMETHING/g'

但我不确定SOMETHING应该是什么。这里有解决办法吗?

(当然,我可以运行九个单行代码,但这似乎效率很低。)

答案1

perl -p -i -e 's/alpha-(\d)/beta-$1/g'
  • \d匹配 0...9
  • (\d)捕获(保存)匹配的内容并将其分配给变量$1(如果添加另一个捕获,它将分配给下一个变量$2
  • 如果号码可以有多于一位数字,您可以使用\d+它来匹配一位或多位数字。

答案2

这是一个完美的用例展望:

's/alpha(?=-\d)/beta/'

仅当其后跟 时,才会替换alpha为。beta-\d

相关内容