我一直在嘗試編寫一個sed命令來替換單個單詞上的單個單詞,保留所有前導空格和單詞。保留前導空格的Sed替換
例如 來源:
<Attr name="x" value="yes"/>
要:
<Attr name="x" value="no"/>
我知道,我可能只是重寫整個行,但我更喜歡一個更優雅的方式來做到這一點。 謝謝!
我一直在嘗試編寫一個sed命令來替換單個單詞上的單個單詞,保留所有前導空格和單詞。保留前導空格的Sed替換
例如 來源:
<Attr name="x" value="yes"/>
要:
<Attr name="x" value="no"/>
我知道,我可能只是重寫整個行,但我更喜歡一個更優雅的方式來做到這一點。 謝謝!
You can't parse XML with regexes。使用XML處理工具。
echo '<doc>
<Attr name="x" value="yes"/>
<Attr name="y" value="yes"/>
<Attr name="x" value="maybe"/>
</doc>' |
xmlstarlet ed -u '//Attr[@name="x"][@value="yes"]/@value' -v "no"
<?xml version="1.0"?>
<doc>
<Attr name="x" value="no"/>
<Attr name="y" value="yes"/>
<Attr name="x" value="maybe"/>
</doc>
我還沒有嘗試過,但它似乎是最好的解決方案和最靈活的!非常感謝你!!! –
我想如果沒有加入更明確的要求,這個簡單的解決方案應該是罰款:
sed 's/"yes"/"no"/'
你可能想把它改成's /「yes」/「no」'或's/\
非常感謝您的回答!但我認爲這不是一個有效的解決方案,因爲(我的錯我沒有解釋它)該文件包含多個條目,您的解決方案將更改整個文件。 –
您可以在s之前添加目標行號。 –
約什的解決方案將改寫字的許多OCCURENCES文件 - 這可能不是你想要的。
下面的sed調用將只在3號線替代的 「是」 第一次出現爲 「無」 裏面file.xml:
sed -i 3s/yes/no/ file.xml
你從哪兒弄來stucked:爲
Attr
節點,其中name
是「x」和value
是「是」,你可以使用像xmlstarlet
工具更換價值? – fedorqui'sed'不接觸空白,除非你告訴它。你是怎麼試着沒有給你正確結果的'sed'? – Shahbaz