web-dev-qa-db-fra.com

Sed pour imprimer le numéro de ligne

Voici mon exemple de fichier

user@linux:~$ cat file.txt 
Line 1
Line 2
Line 3
Line 4
Line 5
user@linux:~$ 

Je peux imprimer la ligne 2-4 avec grep -A2 'e 2' file.txt

user@linux:~$ grep -A2 'e 2' file.txt 
Line 2
Line 3
Line 4
user@linux:~$ 

Je peux également imprimer le numéro de ligne aussi avec grep -n

user@linux:~$ grep -nA2 'e 2' file.txt 
2:Line 2
3-Line 3
4-Line 4
user@linux:~$ 

En outre, la même chose peut être accomplie avec sed -n 2,4p file.txt

user@linux:~$ sed -n 2,4p file.txt 
Line 2
Line 3
Line 4
user@linux:~$ 

Mais je ne sais pas comment imprimer le numéro de ligne avec sed

Serait-il possible d'imprimer le numéro de ligne avec sed?

8
Sabrina

Awk:

awk 'NR==2,NR==4{print NR" "$0}' file.txt

Double SED:

sed '2,4!d;=' file.txt | sed 'N;s/\n/ /'

Glen Jackmann 's SED et pâte:

sed '2,4!d;=' file.txt | paste -d: - -

Perl:

Perl -ne 'print "$. $_" if ($.>=2 and $.<=4)' file.txt

Équivalent Perl:

Perl -ne 'print "$. $_" if $.==2..$.==4' file.txt

CAT et SED:

cat -n file.txt | sed -n '2,4p'

Voir aussi cela Réponse à une question similaire.

Un peu de explication:

  • sed -n '2,4p' et sed '2,4!d;=' Faites la même chose: le premier n'imprime que des lignes entre le deuxième et le quatrième (inclus), ce dernier "supprime" toutes les lignes, à l'exception de celles-ci.

  • sed = imprime le numéro de ligne suivi d'une nouvelle ligne. Voir le Manuel .

  • cat -n Dans le dernier exemple, vous pouvez être remplacé par nl ou grep -n ''.

6
simlev

J'ai fait en dessous mentionné 2 méthodes

Méthode1

awk '/2/{x=NR+2}(NR<=x){print NR"-"$0 }' filename

commander

2-Line 2
3-Line 3
4-Line 4

Méthode2

sed -n '{;=;p}' filename| sed "N;s/\n/ /g"| sed -n '/2/,+2p'

sortir

2 Line 2
3 Line 3
4 Line 4
3
Praveen Kumar BS