替换包含特定值但不包含某些字符的行

时间:2015-01-19 23:03:42

标签: bash sed

我使用以下命令替换包含Mic1 Volume的行:

sed -i 's#.*Mic1 Volume.*#<mixer name="Mic1 Volume" value0="68" />#' ysound.xml

现在我想要替换这些但跳过包含value1字符串的行。

如何使用sed命令执行此操作?

2 个答案:

答案 0 :(得分:1)

试试这个:

sed -i '/value1/!s#.*Mic1 Volume.*#<mixer name="Mic1 Volume" value0="68" />#' ysound.xml
        ^^^^^^^^^

否定运算符为!,位于/regex/

之后

答案 1 :(得分:0)

您可以使用 awk

执行相同操作
awk '!/value1/{gsub(/Mic1 Volume./,"<mixer name="Mic1 Volume" value0="68" />")}1' File

让它到位:

awk '!/value1/{gsub(/Mic1 Volume./,"<mixer name="Mic1 Volume" value0="68" />")}1' File > tmp && mv tmp File

<强>示例:

sdlcb@Goofy-Gen:~/AMD$ cat File
value0
value1
Mic1 Volume. value2
Mic1 Volume. value1
Mic1 Volume. value4
value5
value6
sdlcb@Goofy-Gen:~/AMD$ awk '!/value1/{gsub(/Mic1 Volume./,"<mixer name="Mic1 Volume" value0="68" />")}1' File
value0
value1
<mixer name= value0=68 /> value2
Mic1 Volume. value1
<mixer name= value0=68 /> value4
value5
value6