Sed 删除到匹配后的行末尾,保留不匹配的行

Sed 删除到匹配后的行末尾,保留不匹配的行,sed,line,string-matching,Sed,Line,String Matching,我有以下表格的文件: interesting text-MIB blah blah blah VERY INTERESTING TEXT interesting text-MIB blah blah blah 在包含“-MIB”字符串的每一行中,我想删除该字符串后面的文本,直到该行结束 以下命令似乎按预期工作: sed -i -n -e 's/-MIB.*$/-MIB/p' ./myfile 我的问题是,它还会删除找不到我的模式的行。在这里,“非常有趣的文本”一行将被删除。我对sed不是很熟

我有以下表格的文件:

interesting text-MIB blah blah blah
VERY INTERESTING TEXT
interesting text-MIB blah blah blah
在包含“-MIB”字符串的每一行中,我想删除该字符串后面的文本,直到该行结束

以下命令似乎按预期工作:

sed -i -n -e 's/-MIB.*$/-MIB/p' ./myfile

我的问题是,它还会删除找不到我的模式的行。在这里,“非常有趣的文本”一行将被删除。我对sed不是很熟悉。我做错了什么?sed适合这种治疗吗?

您需要省去
-n
选项。
签出

我已经编辑了你的
sed
。试试这个

sed -i.bak 's/-MIB.*$/-MIB/g' ./myfile
这里,


-i-将对原始文件进行更改,并将原始文件备份到.bak扩展名中

sed
-n
选项会抑制默认打印,如果您在
sed
语句后放置
p
选项,则会禁用默认打印

在上面的示例中,您告诉sed的是禁止打印所有行,然后只打印已成功完成替换的行。因此,不会打印未进行替换的行

您需要从命令中删除
-n
选项和
p

sed -ie 's/-MIB.*$/-MIB/' ./myfile

谢谢你的补充解释。