bash:从文本文件中过滤掉连续的行

时间:2010-03-10 19:25:15

标签: perl bash string sed text-processing

我想从许多文件中删除段落的每个实例。我将段落称为一系列行。

例如:

my first line
my second line
my third line
the fourth
5th and last

问题是我只想在它们作为一个组出现时删除它们。例如,如果

my first line
单独出现,我不想删除它。

3 个答案:

答案 0 :(得分:3)

@OP,我看到你接受了答案,你的段落句子是“难以理解的”,所以我假设那些段落总是一样的?这是真的,你可以使用grep。将要删除的段落存储在文件中,例如“过滤器”,然后使用grep的-f-v选项来完成这项工作,

grep -v -f filter file

答案 1 :(得分:1)

如果你能够使用Perl,你可以在一行中这样做:

perl -0777 -pe 's/my first line\nmy second line\nmy third line\nthe fourth\n5th and last\n//g' paragraph_file

解释在perlrun

  

特殊值00将导致Perl在段落模式下粘贴文件。值0777将导致Perl整个文件,因为没有合法的字节具有该值。

示例输入:

my first line
my second line
my third line
the fourth
5th and last
hey
my first line
my second line
my third line
the fourth
5th and last

hello
my first line

输出:

$ perl -0777 -pe 's/my first line\nmy second line\nmy third line
\nthe fourth\n5th and last\n//g' paragraph_file
hey

hello
my first line

答案 2 :(得分:0)

你可以用sed:

来做
sed '$!N; /^\(.*\)\n\1$/!P; D' file_to_filter