2013-07-30 71 views
0

我正在写一个bash脚本来替换包含空格的行中的模式。 文本看起来像这样 - property name =“abcd”value =“1234”,并且该值在文件中多次更改,如value = 3456和value = 3689。只有包含name =“abcd”和value =东西的行应该被替换。使用sed的空白模式匹配

还有其他实例,其中abcd和值分别被调用,不应该被替换。

我想在替换之前匹配条件名称=“abcd”和值。类似于

sed -i '/name="abcd" value=/c\property name="abcd" value="set"' filename 

如何解决“abcd”和值之间的空白以便sed可以将其识别为单个字符串?

输入:

`property name="abcd" value="1234"` 
`property name="abcd" value="73845"` 
`property name="abcd" value="8276"` 
`property name="qwerty" value="1234"` 
`blah blah ${abcd} blah` 

所需的输出:

`property name="abcd" value="set"` 
`property name="abcd" value="set"` 
`property name="abcd" value="set"` 
`property name="qwerty" value="1234"` 
`blah blah ${abcd} blah` 
+0

在要替换'1234'换句话说和其他用'blank'? –

+1

我不明白你的问题,但你应该*可能*使用XML解析器。 。 。 – ruakh

+0

是,将值替换为字符串空白符合条件的所有实例 – Rahul

回答

0

如果我理解正确的话,你的名字= “嗒嗒” 值=上单独行 “嗒嗒”,并希望只是删除\ n

sed ':a;N;$!ba;s/\n/ /g' 

会做你想要从How can I replace a newline (\n) using sed?

采取什么
+0

不,每行的值不同。我希望将其替换为字符串“blah” – Rahul

0

几个试错后,我想出了解决方案

`sed -i "/V.prop.*value=/c\ <property name=\\\"V.prop\\\" value=\\\"set\\\"/>" filename` 

的*填写在同一直线上的两个搜索模式之间。 \\用于转义双引号。

0

试试这个: