【问题标题】:command line method to remove single line paragraphs from text file从文本文件中删除单行段落的命令行方法
【发布时间】:2012-04-11 16:08:46
【问题描述】:

我有一个包含两种类型段落的 .txt 文件:

一些语句和数字 (02) 等后跟一个返回
还有一些东西,然后是两个回报

然后是单行段落,后跟两个返回

还有一些双行文本返回
还有一些文字。

我想从文本文件中删除所有单行段落。所以结果是:

一些语句和数字 (02) 等后跟一个返回
还有一些东西,然后是两个回报

还有一些双行文本返回
还有一些文字

我一直在尝试使用 sed 和 awk 来执行此操作,但我一直遇到问题,我提出了一个正则表达式,该表达式将查找一个换行符后跟一些字符并以两个连续的换行符结尾 \n\n。

有没有办法用一个衬里做到这一点,还是我必须编写一个脚本来逐行阅读并确定段落的长度并以这种方式将其删除?

谢谢。

【问题讨论】:

    标签: sed awk


    【解决方案1】:
    awk -F '\n' -v RS='' -v ORS='\n\n' 'NF>1' input.txt
    
    • RS 设置为空字符串时,每条记录总是在遇到的第一个空行结束。
    • RS 设置为空字符串,FS 设置为单个字符时,换行符始终充当字段分隔符。

    [read more]

    【讨论】:

    • 这就像一个魅力。谢谢!我应该在 4 小时前问这个 :) 。你能解释一下吗? -F 表示记录分隔符是换行符,如果有超过1个换行符则打印?
    • 在我的一些文件中,由于某些段落非常大(没有空行),我遇到了 awk 3000 字节的记录大小限制。下面提到的perl方法没有遇到这个问题。
    【解决方案2】:

    我倾向于使用 Perl 进行面向段落的解析:

    perl -00 -lne 'print if tr/\n/\n/ > 0'
    

    【讨论】:

      猜你喜欢
      • 2013-10-14
      • 2014-10-21
      • 1970-01-01
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多