Bash
如何在bash中用xml文件的SED搜尋和替換PATH元素
我想從以下位置替換範例路徑標記中的目前元素:
... <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。必須引用屬性。