【发布时间】:2014-08-01 21:06:59
【问题描述】:
我想用引号括住多个单词。 使用 sed 和分组轻松完成任务。
除了我的话位于xml标签的一个属性中。
<daddy>
<son name="blabla">
<belongs having="car cat doll" color="yellow" />
</son>
</daddy>
我希望将having 属性后处理为"'car' 'cat' 'doll'"。
having 是唯一受影响的属性名称。
所以,只匹配这个词没有危险,它会自动成为belongs标签的一部分。
我认为这是一个能够在这里使用 sed 的良好开端,并且不要使用繁重的工具和 xml 阅读器来做艰苦的事情。
我的第一次尝试是匹配模式以过滤行,并尝试包围单词。但它围绕着它们,在整行中匹配,而不仅仅是在第一个模式中。这正是我想要的。
sed "/having=\"[a-z ]\+\"/ s/\([a-z]\+\)/'\1'/g"
.
<daddy>
<son name="blabla">
<'belongs' 'having'="'car' 'cat' 'doll'" 'color'="'yellow'" />
</son>
</daddy>
我的第二次尝试,组匹配让我不再走得更远......
sed "s/havings=\"\(\([a-z]\+\) \?\)*\"/havings=\"'\2'\"/g"
.
<daddy>
<son name="blabla">
<belongs having="'doll'" color="yellow"/>
</son>
</daddy>
【问题讨论】:
标签: xml sed substitution