我正在尝试编写一个bash脚本,它将服务器内部名称更改为大写。
我找到了许多更改特定标签的方法,但是由于我有两个名称相同的标签,并且只想更改内部服务器标签,因此我无法使用sed
进行更改。 / p>
xml示例:
<server-list>
<name>joe</name>
<server.inner>
<name>jake</name>
</server.inner>
</server-list>
我尝试没有成功:
sed 's/<server.inner><name>.*/\U&/' <fileToSed
答案 0 :(得分:1)
只要不将server.inner相互分组并且xml文件非常简单,则像这样的sed脚本可能会起作用:
脚本.sed
/<server.inner>/,/<\/server.inner>/ {
s:<name>(.*)</name>:<name>\U\1\E</name>:gi;
}
您将像这样sed -rf script.sed your.xml
说明
/<server.inner>/,/<\/server.inner>/
仅匹配server.inner
标签的行,并将sed语句应用于这些行s:<name>(.*)</name>:<name>\U\1\E</name>:gi;
进行替换,由于在结束标记中出现了/
,因此我们使用s:..:..:
而不是s:..:..:
(.*) captures the string inside the name tag into the placeholder
\ 1` \U\1\E
是一个gnu sed扩展,将\1
占位符的内容转换为大写形式对于复杂的xml,请遵循Cyrus的建议并使用特殊的xml工具。