sed 打印出行号

9 grep sed

这是我的示例文件

user@linux:~$ cat file.txt 
Line 1
Line 2
Line 3
Line 4
Line 5
user@linux:~$ 
Run Code Online (Sandbox Code Playgroud)

我可以打印第 2-4 行 grep -A2 'e 2' file.txt

user@linux:~$ grep -A2 'e 2' file.txt 
Line 2
Line 3
Line 4
user@linux:~$ 
Run Code Online (Sandbox Code Playgroud)

我也可以打印出行号 grep -n

user@linux:~$ grep -nA2 'e 2' file.txt 
2:Line 2
3-Line 3
4-Line 4
user@linux:~$ 
Run Code Online (Sandbox Code Playgroud)

此外,同样的事情可以完成 sed -n 2,4p file.txt

user@linux:~$ sed -n 2,4p file.txt 
Line 2
Line 3
Line 4
user@linux:~$ 
Run Code Online (Sandbox Code Playgroud)

但我不确定如何打印出行号 sed

是否可以用 打印出行号sed

sim*_*lev 15

AWK:

awk 'NR==2,NR==4{print NR" "$0}' file.txt
Run Code Online (Sandbox Code Playgroud)

sed:

sed '2,4!d;=' file.txt | sed 'N;s/\n/ /'
Run Code Online (Sandbox Code Playgroud)

格伦杰克曼sed粘贴:

sed '2,4!d;=' file.txt | paste -d: - -
Run Code Online (Sandbox Code Playgroud)

bartPerl版本:

perl -ne 'print "$. $_" if 2..4' file.txt
Run Code Online (Sandbox Code Playgroud)

sed:

cat -n file.txt | sed -n '2,4p'
Run Code Online (Sandbox Code Playgroud)

也看到这个答案对一个类似问题。

一点解释:

  • sed -n '2,4p'sed '2,4!d;='做同样的事情:第一个只打印第二个和第四个(包括)之间的行,后者“删除”除那些行之外的每一行。

  • sed =打印行号,后跟换行符。请参阅手册

  • cat -n在最后一个例子中可以替换为nlgrep -n ''

  • sed+paste 也非常易读:`sed '2,4!d;=' file | 粘贴 -d: - -` (2认同)
  • 使用 Perl,您不必显式地与 `$.` 进行比较,只需行号文字就足够了: `perl -ne 'print "$. $_" if 2 .. 4' file.txt` 或 `perl - ne '2 .. 4 并打印 "$. $_"' file.txt` (2认同)