Bash

如何在bash中用xml文件的SED搜尋和替換PATH元素

  • September 21, 2020

我想從以下位置替換範例路徑標記中的目前元素:

...
<examples>
<example path='/test/test123/test12345.txt'/>
<examples>
...

...
<examples>
<example path=/test/test123/>
<examples>
...

sed -i 's/<example path=\/test\/test123\/test12345.txt'>/<example path=\/test\/test123\/>' 123.xml

但它說:

-bash: example: No such file or directory

由於單引號不匹配,您會收到錯誤消息。

帶引號的字元串在第二個引號處結束。shell 發現未引用>/<example並將其解釋為重定向。

此外,您的sed命令不完整。/缺少尾隨分隔符。

我還修復了sed命令以匹配已編輯的輸入數據。

如果要在命令中使用單引號,則sed必須在命令周圍使用雙引號並確保雙引號內沒有任何內容會被 shell 擴展

sed -i "s/<example path='\/test\/test123\/test12345.txt'\/>/<example path=\/test\/test123\/>/" 123.xml

或使用這樣的轉義單引號

sed -i 's/<example path='\''\/test\/test123\/test12345.txt'\''\/>/<example path=\/test\/test123\/>/' 123.xml

順便說一句:如果您使用不同的分隔符(不是 slash /),則不需要轉義模式或替換中的斜杠,例如

sed -i "s#<example path='/test/test123/test12345.txt'/>#<example path=/test/test123/>#" 123.xml
sed -i 's#<example path='\''/test/test123/test12345.txt'\''/>#<example path=/test/test123/>#' 123.xml

問題中顯示的所需輸出不是有效的 XML。必須引用屬性。

引用自:https://unix.stackexchange.com/questions/610016