sed 打印出行号

sed 打印出行号

这是我的示例文件

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最后一个示例中的可以替换为nlgrep -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吗?

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  

如果您只想计算输出,则可以反转管道。

相关内容