sed与“”之间的通配符

时间:2017-06-16 00:13:52

标签: regex bash shell sed

我有一些文件需要更改日志记录级别并尝试使用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

我正在尝试使用level =“wildcard”并将其替换为level =“debug”和行的其余部分

3 个答案:

答案 0 :(得分:2)

使用sed ...

修改xml几乎绝不是一个好主意

那就是说,你的问题是.*,因为它很贪婪。它吸收了剩余的线。

你可以这样做:

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

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

答案 1 :(得分:0)

你需要使正则表达式不那么贪婪,因为你的。*会把所有东西都吃到行尾。

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

答案 2 :(得分:0)

此类内容应将level="blah"替换为level="debug"

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