2012-12-06 66 views
2

我試圖用SSED從XML文件中刪除多線。我能夠刪除XML文件中的某些單行,但我需要能夠刪除多行。SSED刪除多行XML代碼

例如:

<tagnumberone> 
    <tagInside>This must not be deleted</tagInside> 
</tagnumberone> 
<tagnumberone> 
    <tagInside>This must be deleted</tagInside> 
</tagnumberone> 
<tagnumberone> 
    <tagInside>This must not be deleted</tagInside> 
</tagnumberone> 

那麼這意味着什麼,我需要能夠刪除的代碼行這必須被刪除>,然後它的outertags也讓我得到以下結果:

<tagnumberone> 
    <tagInside>This must not be deleted</tagInside> 
</tagnumberone> 
<tagnumberone> 
    <tagInside>This must not be deleted</tagInside> 
</tagnumberone> 

我嘗試使用下面的超級桑達突擊隊: ssed s:\<tagnumberone\>\<tagInside\>This must be deleted\<\/tagInside\>\<\/tagnumberone\>:: <file.xml >out.xmle

這給了我下面的錯誤:未結束的'命令。

我錯過了什麼嗎?

謝謝!

+0

你已經嘗試通過刪除其中的一部分,直到你沒有得到錯誤信息了簡化的命令?這可能會幫助您找出造成錯誤的原因。 –

+0

是的,我做到了。如果我只取一行,例如( blbalbalba),那麼它獲得的去除。所以試圖刪除多行給出了一個錯誤。 我認爲換行符給出了一個問題。但是,如果我將\ n作爲換行符添加,則錯誤顯示:系統無法指定指定的文件。 –

回答

0

我找到了解決方案。實際上,我不知道它爲什麼起作用,但它仍然有效。如果有人現在可以向我解釋下面的代碼,那將是非常棒的:

ssed /<tagnumberone>/!b;N;N;/<tagnumberone>\s*\n\s*<tagInside>This must be deleted<\/tagInside>\s*\n\s*<\/tagnumberone>/d <oldFile >newFile 

謝謝!

+0

你會找到答案[這裏](http://www.gnu.org/software/sed/manual/sed.html)尋找'N'和「d」命令和正則表達式部分。 – anishsane

0

也許,你忘了在「這必須被刪除」的空間。你是否嘗試引用行參數?

ssed "s:\<tagnumberone\>\<tagInside\>This must be deleted\<\/tagInside\>\<\/tagnumberone\>::" <file.xml >out.xmle 
+0

不,我試過了。然後我有以下錯誤:系統找不到指定的文件。 即使添加換行符(\ n)的沒有工作,有或無單/雙引號... 如果我添加了換行符\ n,則誤差爲:系統找不到指定的文件... –