我必須用sed的這份工作運行,不知道值(XXX),但只有屬性(revision
)sed的查找和替換在XML文件中的值
<types name="foo" revision="xxx">
到
<types name="foo" revision="5678">
我第一次嘗試是:
sed '[email protected](revision=\").*@\1$5678\">@'
,但它不工作。
我必須用sed的這份工作運行,不知道值(XXX),但只有屬性(revision
)sed的查找和替換在XML文件中的值
<types name="foo" revision="xxx">
到
<types name="foo" revision="5678">
我第一次嘗試是:
sed '[email protected](revision=\").*@\1$5678\">@'
,但它不工作。
使用以下sed
方法:
sed -Ei 's~(revision=")[^"]+"~\15678"~g' test.xml
-E
選項,允許擴展正expresssion
-i
選項,允許修改文件到位
你也許可以得到sed
完成(在非常簡單的情況下),但編輯xml
這裏更好(也容易出錯) ls,如xmlstarlet
。使用它很簡單:
xmlstarlet ed -u "//types/@revision" -v 5678 old.xml >new.xml
編輯:
使用perl
& XML::LibXML模塊Alernative溶液:
perl -MXML::LibXML -E '$d=XML::LibXML->load_xml(location=>q{file.xml});$_->setAttribute(q{revision},4567)for$d->findnodes(q{//types[@revision]});say $d'
''++爲正確的方法。 'sed'不推薦用於'XML'操作 – Inian
謝謝,jm666,但是我在一個非常有限的設置下運行,只有sed可用。 – pepero
@pepero YMMV,但是想知道哪個平臺(setup)沒有例如'perl'。 :)即使在rPI上也可能有'perl'。該解決方案與使用一些'XML/XPath' perl模塊類似...... – jm666