2013-07-30 70 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

試試這個: