我使用以下命令替换包含Mic1 Volume
的行:
sed -i 's#.*Mic1 Volume.*#<mixer name="Mic1 Volume" value0="68" />#' ysound.xml
现在我想要替换这些但跳过包含value1
字符串的行。
如何使用sed
命令执行此操作?
答案 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