使用linux命令删除并替换一行

时间:2016-06-08 10:29:13

标签: linux bash sed

我正在尝试删除模式匹配的行,并使用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.

我做错了什么?

3 个答案:

答案 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的行匹配,并将其更改为所需的字符串。