Regex 只匹配文档中的一行,然后在Ubuntu上使用bash替换该行中的数字

Regex 只匹配文档中的一行,然后在Ubuntu上使用bash替换该行中的数字,regex,bash,ubuntu,sed,nested,Regex,Bash,Ubuntu,Sed,Nested,我有一个文件'lines.txt',内容如下: SomeLine=string PeopleCharms=007 OtherLine=667 PeopleCount=19 MoreLines%=0 AndYetMore%=34HG711 在Ubuntu14.04上使用名为'change.sh'的bash脚本,我想用另一个作为变量的数字替换“PeopleCount=”行中的“19” 互联网:-)表明 sed -i '/^PeopleCount/ s/\d+/$var/g' lines.txt

我有一个文件'lines.txt',内容如下:

SomeLine=string
PeopleCharms=007
OtherLine=667
PeopleCount=19
MoreLines%=0
AndYetMore%=34HG711
在Ubuntu14.04上使用名为'change.sh'的bash脚本,我想用另一个作为变量的数字替换“PeopleCount=”行中的“19”

互联网:-)表明

sed -i '/^PeopleCount/ s/\d+/$var/g' lines.txt
我们应该做到这一点。但事实并非如此。我还尝试了Expresso,看看我能做些什么,但当然这些工具不够聪明,无法预测我想要什么。。。然而 (为了确保变量不是问题所在,我还使用了静态数字来观察它是否有效)


可以在一个正则表达式中完成吗?非常感谢您的帮助

很少有工具会将
\d
识别为代表一个数字(因此在必要时使用
[0-9]
),shell不会在单引号内展开变量。试试这个:

sed -i 's/^\(PeopleCount=\).*/\1'"$var"'/' lines.txt

为什么不引用整个命令
sed-i“/^\(PeopleCount=\)./\1$var/”lines.txt
。加上1,但是awk也很好用:`gawk-F=-v“x=$var”-i in place'$1==“PeopleCount”{$2=x}1'OFS==lines.txt`@EdMorton我将打印最后的评论:)谢谢Ed-我最初的想法可能源于Ruby,很高兴知道它们不会全部迁移;-)遗憾的是,您提出的命令不仅意味着我不再理解代码(当然可以通过进一步的研究进行调整),而且-它根本不会更改我文件中的行。我急忙补充说,塞勒斯的建议也没有:-(忽略我最后的评论。典型的手指问题。我的道歉。是的。这两个都有效。我完全理解其中一个,所以我会坚持塞勒斯的建议。但另一个是很好的学习材料。非常感谢!!你的想法:
sed-I'/^PeopleCount=/s/[0-9]\+/'“$var”“/”文件