我正在尝试删除模式匹配的一行,并使用 sed 命令将整行替换为另一行。文件内容:示例.txt
Testfile=xxxx
Testfile3=uuuu
Testfile4=oooo
Testfile5=iiii
Testfile2=ikeii
我正在使用sed命令删除包含Testfile3=*的行,并替换为Testfile3=行更改
sed -i 's/Testfile3=*/Testfile3=linechanged/' Sample.txt.
但它只是将可替换字符串附加到行中,如下所示
Testfile3=linechanged=uuuu.
我期望输出是
Testfile3=linechanged.
我做错了什么?
星星不匹配:
sed -i 's/Testfile3=.*/Testfile3=linechanged/' Sample.txt
# ^^
.*
匹配任何长度(*
)的任何字符(.
),所以它将匹配所有内容,直到行尾。
您可以使用捕获的组来保留将保留的内容,并使用所需的替换来替换其余部分:
sed -i 's/^(Testfile3=).*/1linechanged/' file.txt
在您的情况下,像*
这样的转义正则表达式令牌*
将与*
字面上匹配,例如 到时候Testfile3=*
会匹配。
这可能对你有用(GNU sed):
sed '/Testfile3/cTestfile3=linechanged' file
这将匹配包含Testfile3
的行,并将其更改为所需的字符串。