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'。 1 つ目は 2 番目と 4 番目(含む)の間の行だけを印刷し、後者はその行を除くすべての行を「削除」します。

  • sed =行番号の印刷その後に改行文字が続きます。。より手動

  • cat -n最後の例では、またはnlで置き換えることができますgrep -n ''

答え2

以下の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- 行番号フィルタ

その後、目的の方法を使用して行を選択できます。

(編集する)

すべてPOSIXnl する空行数:

$ 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  

出力のみを計算したい場合は、パイプを逆にするだけです。

関連情報