我有一個XML文件,該文件將永遠有它裏面以下塊使用桑達:猛砸一個變量
<Name NameType="Also Known As">
<NameValue>
<FirstName>name1</FirstName>
<Surname>sur1</Surname>
</NameValue>
<NameValue>
<FirstName>name2</FirstName>
<Surname>sur2</Surname>
</NameValue>
</Name>
有可能只是一個「NameValue」這個區塊內的節點或可能有很多。我的問題是,我只想保留第一個並丟棄其餘的。因此上面的例子會讀取:
<Name NameType="Also Known As">
<NameValue>
<FirstName>name1</FirstName>
<Surname>sur1</Surname>
</NameValue>
</Name>
我想使用sed來達到此目的。我已經寫了上面的塊給一個變量,並試圖以操縱如下:
var=$(sed -n '/<Name NameType="Also Known As">*/,/<\/Name>/p' $file)
sed -i 's/<\/NameValue>.*<\/Name>/<\/NameValue><\/Name>/g' "$var"
我得到的回報如下:
sed: can't read <Name NameType="Also Known As">...
我認爲第一閉合之間的上述會取代一切NameValue標籤和沒有任何東西的關閉Name標籤。我使用-i選項,因爲我想將更改保存到此文件。也許它是語法相關的,或者我對變量使用sed命令的理解還沒有結束。需要注意的一點是,這些標籤出現在文件中的其他節點內,因此使用sed執行一次全局更新會更改我不想更改的塊。這是我將這個塊傳遞給一個變量的原因。任何指針在正確的方向將不勝感激。
sed的文件和流(流編輯器),不變量進行操作。把你的變量內容放入其中。 –
那麼你也可以說'sed'...東西...'<<<「$ var」'。 – fedorqui
謝謝@Ignacio。我已經採取了你的建議,並將該變量的內容輸出到一個文件中,我可以輕鬆地進行我需要的字符串操作。然後我可以用這個新文件的內容替換原始文件中的那個塊(或者至少這是我目前正在嘗試做的)。我深知,這是不乾淨的解決方案,並可能隨時間和使用shell命令更多的經驗,我會避免這種類型的方法,但現在我只是一些作品後很。再次感謝您花時間回覆。 – tasslebear