2017-06-16 42 views
1

之間「」我有一些文件,我需要更改日誌記錄級別,並試圖用sed桑達通配符

<asyncLogger name="blabla" additivity="true" level="info" includeLocation="true"> 
    </asyncLogger> 

    <asyncLogger name="blabla1" additivity="true" level="fine"> 

我厭倦了這樣的命令,但它減少了線路的末端。

sed 's/\(level="\).*/"\1\debug\"/' file.xml 

我想細等級=「通配符」,並與水平替換=「調試」而行

回答

2

其餘它幾乎從不修改XML與sed一個好主意..

這就是說,你的問題是.*,因爲它是貪婪的。它吸收了該行的其餘部分。

你可以這樣做:

$ sed -E 's/(level=")[^"]*/\1debug/' file 
<asyncLogger name="blabla" additivity="true" level="debug" includeLocation="true"> 
</asyncLogger> 

<asyncLogger name="blabla1" additivity="true" level="debug"> 
+0

完美的作品:)你會用它來修改XML如果沒有sed的? – Dusty

+0

正確的xml解析器。 Python,Perl,Ruby,PHP,Java,Javascript等等 – dawg

0

你需要做的正則表達式貪心不足爲您的*什麼都吃到行的末尾。

sed -r -e 's/(\<level *= *)["a-zA-Z"]+/\1"debug"/g'
0

像這樣的東西應該更換level="blah"level="debug"

sed -e 's/level="[^"]"/level="debug"/g' file.xml