匹配后删除到行尾,保持行不匹配

时间:2013-06-25 12:14:36

标签: 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并不熟悉。我究竟做错了什么?是否适合这种治疗?

3 个答案:

答案 0 :(得分:3)

我已编辑了您的sed。试试这个,

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

下面,

-i - 将对原始文件进行更改,并以.bak扩展名

备份原始文件

答案 1 :(得分:2)

答案 2 :(得分:1)

sed -n选项会禁止默认打印,如果您在p语句后添加sed选项,则会在以后启用该打印。

在上面的示例中,您所说的sed是禁止打印所有行,然后仅打印已成功完成替换的行。结果,从不打印没有替换的行。

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

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