部分匹配的正则表达式字符串替换/值增量

时间:2014-12-05 02:29:26

标签: regex perl shell

我正在尝试使用shell perl脚本增加文本文件中的特定值

这是我的档案:

foo=123
bar=456
baz=789

这是我尝试使用的shell命令:

perl -p -i -e 's/bar=(\d+)/$1 + 1/ge' myfile.txt

然而,失去了“bar =”部分。如何匹配“bar = 456”并且只增加到457?

2 个答案:

答案 0 :(得分:3)

bar=匹配到一个组中,例如;

perl -p -i -e 's/(bar=)(\d+)/$1.($2 + 1)/ge' myfile.txt

答案 1 :(得分:3)

您应该确保使用行锚^的开头部分匹配。您还可以使用lookbehind断言(?<= ... )来保留匹配的第一部分,或\K如果您的Perl版本支持它。您也不需要在每个单独的开关之前放一个破折号。

perl -pie 's/(?<=^bar=)(\d+)/$1 + 1/ge' 

\K

perl -pie 's/^bar=\K(\d+)/$1 + 1/ge'
相关问题