2015-10-22 83 views
0

我的配置文件包含與特定的值刪除XML標記的sed

<configuration> 
<property> 
    <name>name1</name> 
    <value>value1</value> 
    <description>desc1</description> 
</property> 
<property> 
    <name>name2</name> 
    <value>valueToRemove</value> 
    <description>desc2</description> 
</property> 
<property> 
    <name>name3</name> 
    <value>value3</value> 
    <description>desc3</description> 
</property> 
<property> 
    <name>name3</name> 
    <value>valueToRemove</value> 
    <description>desc4</description> 
</property> 
<property> 
    <name>name5</name> 
    <value>valu5</value> 
</property> 
</configuration> 

我想刪除包含值valueToRemove所有屬性標記。

我想下一個輸出

<configuration> 
<property> 
    <name>name1</name> 
    <value>value1</value> 
    <description>desc1</description> 
</property> 
<property> 
    <name>name3</name> 
    <value>value3</value> 
    <description>desc3</description> 
</property> 
<property> 
    <name>name5</name> 
    <value>valu5</value> 
</property> 
</configuration> 

下一頁bash腳本只刪除線,價值標籤。

sed -i "/[<property>].*valueToRemove.*[<\/property]>/d" "test" 

幫助我,請我非常新的抨擊和正則表達式。

+0

可能的重複[你能提供一些爲什麼很難用正則表達式解析XML和HTML的例子嗎?](http://stackoverflow.com/questions/701166/can-you-provide-some-examples -of-爲什麼 - 這 - 是 - 難以解析的XML和HTML的-與-A-REG) –

回答

1

永遠不要用正則表達式解析XML。他們是just the wrong tools for XML and its variants

真的,現在有一個XML解析器並不難。有很多庫和工具可以這樣做;特別是如果你對bash編程不熟悉,爲什麼要使用它?

從操作系統視角和bash腳本的唯一區別python腳本是他們的第一行,

#!/path/to/program/that/will/interpret/this/script 

對你而言,你可以使用任何腳本語言,例如, python,它有一個很好的XML庫。使用python和lxml,只需幾行代碼即可,只要它是有效的XML,即使是最少的sed XML也能正確顯示。

tl; dr:請勿使用正則表達式/ sed來解析XML。使用XML解析器。 Bash只是一個腳本解釋器,還有更強大的腳本語言來處理這些任務。