【问题标题】: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适合这种治疗吗?

【问题讨论】:

    标签: sed line string-matching


    【解决方案1】:

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

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

    这里,

    -i - 将更改原始文件并以 .bak 扩展名备份原始文件

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

        sed -n 选项会抑制默认打印,如果您将 p 选项放在 sed 语句之后,则会启用该默认打印。

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

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

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

        【讨论】:

        • 感谢您的补充说明。
        猜你喜欢
        • 2018-09-13
        • 2019-10-03
        • 1970-01-01
        • 2011-11-22
        • 1970-01-01
        • 1970-01-01
        • 2020-03-28
        • 2021-07-04
        • 2012-01-09
        相关资源
        最近更新 更多