Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sed 从文本文件中删除单行段落的命令行方法_Sed_Awk - Fatal编程技术网

Sed 从文本文件中删除单行段落的命令行方法

Sed 从文本文件中删除单行段落的命令行方法,sed,awk,Sed,Awk,我有一个.txt文件,其中包含两种类型的段落: 一些语句和数字(02)等,后面跟着一个返回值 还有一些东西,然后是两次返回 然后是一个单行段落,后跟两个返回值 再加上一些双线文本返回 还有一些文字 我想从文本文件中删除所有单行段落。结果是: 一些语句和数字(02)等,后面跟着一个返回值 还有一些东西,然后是两次返回 再加上一些双线文本返回 更多的文字 我一直在尝试使用sed和awk来实现这一点,但在使用正则表达式时遇到了一些问题,该正则表达式将查找后跟一些字符的换行符,并以两个连续的换行符结尾\

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

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

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

再加上一些双线文本返回
还有一些文字

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

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

再加上一些双线文本返回
更多的文字

我一直在尝试使用sed和awk来实现这一点,但在使用正则表达式时遇到了一些问题,该正则表达式将查找后跟一些字符的换行符,并以两个连续的换行符结尾\n\n

到底有没有办法用一行字来完成这个任务,还是我必须写一个脚本来逐行阅读,确定段落的长度,然后用这种方式把它去掉

谢谢

awk -F '\n' -v RS='' -v ORS='\n\n' 'NF>1' input.txt
  • RS
    设置为空字符串时,每条记录始终以遇到的第一个空行结束
  • RS
    设置为空字符串,并且
    FS
    设置为单个字符时,换行符始终充当字段分隔符

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

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

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