使用 Linux“cat”命令,如何按编号仅显示某些行

使用 Linux“cat”命令,如何按编号仅显示某些行

如果我使用cat -n text.txt自动对行进行编号,那么如何使用该命令仅显示某些编号的行。

答案1

使用sed

用法

$ cat file
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10

打印一行 (5)

$ sed -n 5p file
Line 5

打印多行(5 和 8)

$ sed -n -e 5p -e 8p file
Line 5
Line 8

打印特定范围 (5 - 8)

$ sed -n 5,8p file
Line 5
Line 6
Line 7
Line 8

打印其他特定行的范围(5 - 8 和 10)

$ sed -n -e 5,8p -e 10p file
Line 5
Line 6
Line 7
Line 8
Line 10

答案2

一种方法是使用sed

cat -n text.txt | sed '11d'

其中 11 是您要删除的行号。

或者删除除 11 之外的所有内容:

cat -n text.txt | sed '11!d'

范围也是可能的:

cat -n text.txt | sed '9,12!d'

甚至cat -n不需要:

sed '9,12!d' text.txt

答案3

您可以直接使用 awk。

awk 'NR==1' file.txt

将“1”替换为所需的行号。

答案4

正如其他人向您展示的那样,无需使用cat -n.其他程序会为你做这件事。但是,如果您确实需要解析输出cat -n并仅显示特定行(例如 4-8、12 和 42),您可以这样做:

$ cat -n file | awk '$1>=4 && $1<=8 || $1==12 || $1==42'
 4  Line 4
 5  Line 5
 6  Line 6
 7  Line 7
 8  Line 8
12  Line 12
42  Line 42

在 中awk$1是第一个字段,因此此命令打印第一个字段为 i) 4 到 8(含)或 ii) 12 或 iii) 42 之间的所有行。

如果您还想删除添加的字段以cat -n从文件中获取原始行,您可以执行以下操作:

$ cat -n file | awk '$1>=4 && $1<=8 || $1==12 || $1==42{sub(/^\s*[0-9]+\s*/,""); print}'
Line 4
Line 5
Line 6
Line 7
Line 8
Line 12
Line 42

相关内容