【发布时间】:2014-10-30 11:57:30
【问题描述】:
我正在尝试为大量 xml 文件批量添加新标签。
一个示例xml如下:
<attribute name="MyAttribute">
<type>
<long>
<range>
<min>0</min>
<max>100000</max>
</range>
<defaultValue>0</defaultValue>
</long>
</type>
</attribute>
在上面的示例中,我有一个带有一定缩进的“类型”标签。我希望能够做到以下几点:
- 查找此“类型”标签的所有实例
- 复制标签所在的行,包括缩进(The 整个文件的缩进不一致,因此不能是 硬编码值)
- 在“type”上方粘贴一个新标签,例如“myAddedTag” 标记并保持缩进
预期结果:
<attribute name="MyAttribute">
<myAddedTag>
<type>
<long>
<range>
<min>0</min>
<max>100000</max>
</range>
<defaultValue>0</defaultValue>
</long>
</type>
</attribute>
我一直在使用 sed 在 shell 脚本中查找类型标记并将其替换为类似以下命令的内容,但我的问题是缩进 - 我似乎不知道如何维护它。我尝试添加空格,但所有文件的缩进都不相同。
sed 命令示例如下: 文件:my_sample_sed_script.sh
#!/usr/bin/env bash
sed -i "s/<type>/<myAddedTag \/>\n<type>/g" $1
我在 bash 中使用这个命令调用脚本:
my_sed_script.sh sample.xml
但是,输出如下——看类型标签没有缩进:
<attribute name="MyAttribute">
<myAddedTag>
<type>
<long>
<range>
<min>0</min>
<max>100000</max>
</range>
<defaultValue>0</defaultValue>
</long>
</type>
</attribute>
任何帮助将不胜感激。正如我所提到的,我的问题是试图找到一种解决方案,使缩进与我正在复制/替换的行相同。
【问题讨论】: