我想用水果葡萄的5000代替2000。如何使用sed从“葡萄”位置开始搜索并替换首次出现的
<fruits>
<fruit>
<name>apple</name>
<value>2000</value>
</fruit>
<fruit>
<name>grapes</name>
<value>2000</value>
</fruit>
<fruit>
<name>banana</name>
<value>2000</value>
</fruit>
</fruits>
我尝试了
sed '\,grapes, s/2000/5000/' fruits.txt
答案 0 :(得分:0)
app.php
我们使用广义的use
来避免在结束标记中反斜杠。 FormServiceProvider.php
不需要反斜杠,因为if (pictureBox1.Image == Properties.Resources.bug1)
{
MessageBox.Show("here");
}
已经知道sed -i '\%<name>grapes</name>%,\%</fruit>%s%<value>2000</value>%<value>5000</value>%' fruits.xml
之后的东西是分隔符。
在* BSDish平台(包括MacOS)上,您需要在脚本本身之前添加\%
的显式空字符串参数(因此s%%%
)
这是严格的,但是当然不能解决XML语法上允许的所有可能的变体。如果您的文件始终采用预期的格式,则此方法现在应该可以使用。缺点之一是,由于Jenkins决定开始在标签内或其他标签内使用空格,因此当它停止工作时您不会收到任何警告。
答案 1 :(得分:0)
使用xmlstarlet:
xmlstarlet ed -u "//fruits/fruit/name[.='grapes']/following-sibling::value" -v 5000 fruits.xml
这将通过选择xpath ed -u
(其中//fruits/fruit/name
是name
和grapes
是following-sibling
的xpath value
来更新(5000
)xml。 ,将内容更改为perform()
。
答案 2 :(得分:0)
sed用于做旧的/旧的/新的全部。对于其他任何事情,您都应该使用awk:
$ awk '/grapes/{f=1} f && sub(/2000/,"5000"){f=0} 1' file
<fruits>
<fruit>
<name>apple</name>
<value>2000</value>
</fruit>
<fruit>
<name>grapes</name>
<value>5000</value>
</fruit>
<fruit>
<name>banana</name>
<value>2000</value>
</fruit>
</fruits>