xml - 在 XML 文件中查找和递增数字

标签 xml perl awk

我正在尝试在 XML 中搜索字符串文件,将数字增加 1紧随其后,然后将更改保存回同一个文件。这个字符串只有一个实例。

我的文件看起来像这样:

        <attribute>
                <name>test</name>
                <type>java.lang.String</type>
                <value>node1-3</value>
        </attribute>

我正在尝试更改 3 (在 node1- 之后)并将其增加 1每次我运行一个命令。我尝试了以下 sed,将该行分成 4件,并将其替换为那些 4件,加上增量。不幸的是,它似乎没有做任何事情:
 sed -i -r -e 's/(.*)(\node1-)([0-9]+)(.*)/echo "\1\2$((\3+1))\4"/g' filepath

我也试过 awk ,这似乎让我在某个地方,但我不确定如何将行的后半部分附加到 (
awk '{FS=OFS="-" }/node1/{$2+=1}1' filepath

最后,我尝试了 perl,但它增加了错误的数字,来自 node1node2 , 而不是在破折号之后:
perl -i -pe '/node1-/ && s/(\d+)(.*)/$1+1 . $2/e' filepath

我是这些命令的新手,对我的正则表达式不太熟悉。我试图让这个命令工作,以便我可以在我正在编写的 bash 脚本中使用它。最好的方法是什么?哪个命令比另一个有优势?我想要一个 1行命令以简化后面的事情。

最佳答案

你能对节点行的最后部分进行硬编码吗?

$ awk '{FS=OFS="-" }/node1/{$2+=1; print $1 "-" $2 "</value>"} $0 !~ /node1/ {print}' file
  <attribute>
          <name>test</name>
          <type>java.lang.String</type>
          <value>node1-4</value>
  </attribute>

关于xml - 在 XML 文件中查找和递增数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61467672/

相关文章:

android - eclipse 中缺少 android 文件

sql-server - 根据条件消除 XML 中的行

linux - 当使用 5 个输入文件时,bash xargs 加上 bash Paste 可以输出正好 3 个文件吗?

regex - 使用 awk 从字符串中提取子字符串

perl - 如何在使用 Text::SimpleTable 绘制的每次迭代中清空 $table

linux - 合并/加入两个表快速 linux 命令行

java - JAXB:为什么如果我只设置某个值,该值会返回 null,而当我设置其他值时,会返回实际值?

java - 使用 JAXB 将空列表编码为不存在的节点

mysql - 尝试使用 macports mysql 和 perl 安装 DBD::mysql 失败 make test [Snow Leopard]

xml - 在 Perl 中输出完整的 xml (XML::Xpath)