我试图在XML文件中搜索一个字符串,将1紧随其后的数字递增,然后将更改保存回同一个文件。这个字符串只有一个实例。
我的文件看起来像这样:
<attribute>
<name>test</name>
<type>java.lang.String</type>
<value>node1-3</value>
</attribute>
Run Code Online (Sandbox Code Playgroud)
我正在尝试更改3(在 node1- 之后)并在1每次运行命令时增加它。我尝试了以下 sed,将该行分成4几部分,然后用这些4部分替换它,再加上一个增量。不幸的是,它似乎没有做任何事情:
sed -i -r -e 's/(.*)(\node1-)([0-9]+)(.*)/echo "\1\2$((\3+1))\4"/g' filepath
Run Code Online (Sandbox Code Playgroud)
我也试过awk,这似乎让我在某个地方,但我不确定如何将行的后半部分附加到 (
awk '{FS=OFS="-" }/node1/{$2+=1}1' filepath
Run Code Online (Sandbox Code Playgroud)
最后,我尝试了 perl,但它增加了错误的数字,从node1到node2,而不是在破折号之后:
perl -i -pe '/node1-/ && s/(\d+)(.*)/$1+1 . $2/e' filepath
Run Code Online (Sandbox Code Playgroud)
我是这些命令的新手,对我的正则表达式不太熟悉。我试图让这个命令工作,以便我可以在我正在编写的 bash 脚本中使用它。最好的方法是什么?哪个命令比另一个有优势?我想要一个1行命令来简化以后的事情。