如果我使用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