首页 > 解决方案 > 使用 seq 和 regex 选择新行并将其添加到 xml 文件

问题描述

我有超过 1k 个 xml 文件,并且在循环中我想对 xml 文件做一些更改

原来的

<annotation>
  <folder>VOC2014_instance/person</folder>
  <filename>set00_V000_69.jpg</filename>
  <source> ... </source>
  ....
  ....
</annotation>

修改后的样子

<annotation>
  <folder>VOC2014_instance/person</folder>
  <filename>set00_V000_69.jpg</filename>
  <path>/home/red/MyDataset/set00_V000_69.jpg</path>
  <source> ... </source>
  ....
  ....
</annotation>

所以,我试着写这段代码

for file in $PWD/*.xml
do
    sed -i 's/filename>/[\n]    <path></path>/g' $file
done

我正在做的是找到文件名>,然后追加new line with \n + 4 spaces + <path>/home/red/$filename</path> + newline

我知道我做的不对,但首先我不知道如何选择文件名 b/w然后在末尾添加一个新行并带有空格

标签: regexbash

解决方案


所以这就是完整的命令的样子:

for file in $PWD/*.xml
do
do sed -i 's/>Images</>VOC2012</g' $file
filename=$(basename "$file")
xmlstarlet edit --inplace \
           --append "//annotation/filename" \
           --type elem --name "path" --value "/home/red/MyDataset/music/Images/$filename" $file
done

推荐阅读