获取除 x 到 y 之外的所有行

获取除 x 到 y 之外的所有行

我有一个像这样的文件:

A
B
C
D
E
F

我可以使用第 2 行到第 4 行sed -n 2,4p

如何获得除2到4之外的所有行?

答案1

您的示例命令确实与您想要的相反。阅读手册页并注意-n禁用sed的默认行为,即打印处理的每一行。您禁用行的打印,然后显式仅打印 range 中的行2,4

一种解决方案是启用行的默认打印,但告诉sed删除范围内的行:

$ sed 2,4d << EOF
> A
B
C
D
E
F
> EOF
A
E
F

答案2

函数前面可以有一个!字符,在这种情况下,如果地址不选择模式空间,则应应用该函数。

来源

在你的情况下,函数是p,地址是2,4

sed -n '2,4!p'

(单引号如果!你的 shell 有特殊情况.)

答案3

恕我直言,awk 语法更简单,因为它只是基本数学:

$ awk '(2 <= NR) && (NR <= 4)' file
B
C
D

$ awk '(NR < 2) || (4 < NR)' file
A
E
F

您可以在 awk 中编写范围表达式,就像在 sed 中一样,但您不必在 awk 中这样做,因此最好不要这样做,以确保清晰可维护性等。

答案4

awk '!(NR>=2 && NR<=4)' filename

输出

A
E
F

相关内容