匹配后删除到行尾,保留不匹配的行
Posted
技术标签:
【中文标题】匹配后删除到行尾,保留不匹配的行【英文标题】:Delete to end of line after a match, keep lines not matched 【发布时间】:2013-06-22 05:36:23 【问题描述】:我有一个格式如下的文件:
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适合这种治疗吗?
【问题讨论】:
【参考方案1】:我已编辑您的sed
。试试这个,
sed -i.bak 's/-MIB.*$/-MIB/g' ./myfile
这里,
-i - 将更改原始文件并以 .bak 扩展名备份原始文件
【讨论】:
【参考方案2】:您需要省略-n
选项。
查看http://www.gnu.org/software/sed/manual/sed.html#index-g_t_002d_002dquiet-7
【讨论】:
【参考方案3】:sed
-n
选项会抑制默认打印,如果您将 p
选项放在 sed
语句之后,则会启用该默认打印。
在上面的示例中,您告诉sed
是禁止打印所有行,然后仅打印那些已成功完成替换的行。因此,不会打印没有进行替换的行。
您需要从命令中删除 -n
选项和 p
:
sed -ie 's/-MIB.*$/-MIB/' ./myfile
【讨论】:
感谢您的补充说明。以上是关于匹配后删除到行尾,保留不匹配的行的主要内容,如果未能解决你的问题,请参考以下文章