我一直在尝试编写一个sed命令来替换单行上的单个单词,保留所有前导空格和单词。
e.g。 从:
<Attr name="x" value="yes"/>
要:
<Attr name="x" value="no"/>
我知道我可以重写整行,但我更喜欢用更优雅的方式来完成它。 谢谢!
答案 0 :(得分:4)
我认为如果不添加更具体的要求,这个简单的解决方案应该没问题:
sed 's/"yes"/"no"/'
答案 1 :(得分:1)
You can't parse XML with regexes。使用XML处理工具。要替换Attr
为“x”且name
为“是”的value
个节点的值,您可以使用xmlstarlet
之类的工具:
echo '<doc>
<Attr name="x" value="yes"/>
<Attr name="y" value="yes"/>
<Attr name="x" value="maybe"/>
</doc>' |
xmlstarlet ed -u '//Attr[@name="x"][@value="yes"]/@value' -v "no"
<?xml version="1.0"?>
<doc>
<Attr name="x" value="no"/>
<Attr name="y" value="yes"/>
<Attr name="x" value="maybe"/>
</doc>
答案 2 :(得分:0)
Lajos的解决方案将重写文件中许多单词的出现 - 这可能不是你想要的。
在sed调用之后,将仅在第3行中将第一次出现的“yes”替换为“no”:
sed -i 3s/yes/no/ file.xml