【问题标题】:Delete only the line following the regex while retaining the line with the regex仅删除正则表达式之后的行,同时保留正则表达式的行
【发布时间】:2013-03-21 06:13:03
【问题描述】:

好吧,我完全被难住了......

场景:使用 Word 查看时包含 100 行文本的 .rtf 文件。一行中的“Linux”一词,下方有一个空行。我需要保留带有“Linux”的行并删除它下面的空行。但是,当使用 vi 查看时,该行并不是真正的空白,因此处理删除空白行的帖子都不起作用。另外,我可以找到很多帖子来删除带有正则表达式和下一行的行,但我需要保留正则表达式行。文件中只有一行带有“Linux”一词。

我知道 sed 可以做到这一点,但一直无法弄清楚。

【问题讨论】:

    标签: sed


    【解决方案1】:
    sed '/Linux/{n;d;}'
    

    (...而且答案必须包含至少 30 个字符。)

    【讨论】:

    • 也许改成sed '/^Linux$/{n;d;}' thefile > thenewfile(如果Linux真的是相关行中唯一的东西)......但你的解决方案的想法仍然正确。
    • @OlivierDulac:我也想过,但是'"文件里只有一行写着"Linux"'
    • 感谢 Olivier 和 Beta!我试过了,它似乎可以在 CentOS 上运行,但由于某种原因,Word 无法打开文件(说它已损坏)。我一直在尝试在 Windows 7 机器上安装 gnuwin sed,但它不起作用。
    • Word 不能很好地配合别人;如果 Word 开始编写文件,它可能无法容忍其他工具的编辑。
    • 你明白了,贝塔!所有隐藏的角色都玩得不好。走上不一样的路。我非常感谢你们两位的快速协助!
    【解决方案2】:

    也许是这个?我查看了一个 RTF 文件,看起来好像有回车分隔行。因此,我将它们用作记录分隔符并删除了一行,并且能够读取结果文件并且该行消失了。我不知道它是否适用于其他情况。你必须彻底测试它是否有效。我使用了 awk,因为 rtf 文件在 Unix/Linux 中不是“有效”的文本文件,我认为 sed 可能无法做到这一点..

    awk 'n-->0{next} /Linux/{n=1}1' RS='\r' ORS='\r' infile.rtf > outfile.rtf
    

    如果它有效,它应该丢弃带有单词“Linux”的行下方的行。

    【讨论】:

    • 审查员,awk 也没有乐趣。我猜是由于 .rtf 字符,两者都行不通。我非常感谢您的帮助!
    • 哦,值得一试.. ;) 我使用的 rtf 是使用 MS Word 创建的,也许这会有所不同..
    猜你喜欢
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多