我正在尝试删除模式匹配的行,并使用sed命令将整行替换为另一行。 文件内容:Sample.txt
Testfile=xxxx
Testfile3=uuuu
Testfile4=oooo
Testfile5=iiii
Testfile2=ikeii
我使用sed命令删除一行包含Testfile3 = *并替换为Testfile3 = linechanged
sed -i 's/Testfile3=\*/Testfile3=linechanged/' Sample.txt.
但它只是在行中附加可替换的字符串,如下所示
Testfile3=linechanged=uuuu.
我期待输出
Testfile3=linechanged.
我做错了什么?
答案 0 :(得分:4)
明星未正确匹配:
sed -i 's/Testfile3=.*/Testfile3=linechanged/' Sample.txt
# ^^
.*
匹配任何长度(.
)的任何字符(*
),因此它会匹配所有内容直到行尾。
答案 1 :(得分:2)
您可以使用捕获的组来保留要保留的内容,并使用所需的替换来完成剩下的工作:
sed -i 's/^\(Testfile3=\).*/\1linechanged/' file.txt
在您的情况下,转发*
之类的正则表达式令牌\*
将完全匹配*
,例如Testfile3=*
将与之匹配。
答案 2 :(得分:1)
这可能适合你(GNU sed):
sed '/Testfile3/cTestfile3=linechanged' file
这与包含Testfile3
的行匹配,并将其更改为所需的字符串。