删除固定的行序列以及之后的所有内容

删除固定的行序列以及之后的所有内容

输入是input.txt包含这些行的文件

5
ccc
36
52
1
2
3
78
69
aaa
bb

固定的行顺序是这样的

1
2
3

我想删除这个序列以及之后的所有内容,只得到这个

5
ccc
36
52

我必须将此输出插入到output.txt.我想我可以同时使用 sed 和 grep,但我做不到。

答案1

一种方法(使用sed)是使用 3 行“滑动窗口”:
一次打印一行,并在该特定的 3 行序列位于模式空间中时退出:

sed -n '1N;$!N;/1\n2\n3/q;P;D' input > output

答案2

使用pcregrep

$ pcregrep -v -M "^1$\n^2$\n^3$\n(.*\n)*" file

-v , --反转匹配

反转匹配的意义,以选择不匹配的行。 (-v 由 POSIX 指定。)

-M, --多行

允许模式匹配多行。当给出此选项时,模式可能会有效地包含文字换行符以及内部出现的 ^ 和 $ 字符。

$ pcregrep  -M "^1$\n^2$\n^3$\n(.*\n)*" file
1
2
3
78
69
aaa
bb

上面的命令获取多行模式以及之后的每条记录。通过-v选项,该命令会给出所需的输出。

相关内容