这是我的示例文件
user@linux:~$ cat file.txt
Line 1
Line 2
Line 3
Line 4
Line 5
user@linux:~$
我可以打印第 2-4 行grep -A2 'e 2' file.txt
user@linux:~$ grep -A2 'e 2' file.txt
Line 2
Line 3
Line 4
user@linux:~$
我也可以打印出行号grep -n
user@linux:~$ grep -nA2 'e 2' file.txt
2:Line 2
3-Line 3
4-Line 4
user@linux:~$
另外,同样的事情可以通过sed -n 2,4p file.txt
user@linux:~$ sed -n 2,4p file.txt
Line 2
Line 3
Line 4
user@linux:~$
但我不知道如何打印出行号sed
可以用 打印出行号吗sed
?
答案1
AWK:
awk 'NR==2,NR==4{print NR" "$0}' file.txt
双倍的sed:
sed '2,4!d;=' file.txt | sed 'N;s/\n/ /'
格伦·杰克曼的sed和粘贴:
sed '2,4!d;=' file.txt | paste -d: - -
巴特的珀尔版本:
perl -ne 'print "$. $_" if 2..4' file.txt
猫和sed:
cat -n file.txt | sed -n '2,4p'
另请参阅此回答类似的问题。
一点解释:
sed -n '2,4p'
并sed '2,4!d'
做同样的事情:第一个仅打印第二个和第四个(含)之间的行,后者“删除”除这些之外的每一行。sed =
打印行号随后是换行符。请参阅手动的。cat -n
最后一个示例中的可以替换为nl
或grep -n ''
。
答案2
我已经通过下面提到的两种方法完成了
方法1
awk '/2/{x=NR+2}(NR<=x){print NR"-"$0 }' filename
命令
2-Line 2
3-Line 3
4-Line 4
方法2
sed -n '{;=;p}' filename| sed "N;s/\n/ /g"| sed -n '/2/,+2p'
输出
2 Line 2
3 Line 3
4 Line 4
答案3
这不正是这样的事情nl
吗?
然后您可以使用任何您想要选择行的方法。
(编辑)
每POSIX,nl
做空行数:
$ nl -b a example
1 line1
2
3 line3
4
5 line5
6
$ nl -b a < example | sed -n '2,4p'
2
3 line3
4
如果您只想计算输出,则可以反转管道。