web-dev-qa-db-fra.com

Obtenir le numéro de ligne lors de l'utilisation de grep

J'utilise grep récursif pour rechercher une chaîne dans les fichiers. Tous les fichiers correspondants, ainsi que les lignes contenant cette chaîne, sont imprimés sur le terminal. Mais est-il possible d’obtenir les numéros de ligne de ces lignes aussi ??

ex: je reçois actuellement /var/www/file.php: $options = "this.target", mais ce que je cherche à obtenir, c’est /var/www/file.php: 1142 $options = "this.target";, où 1142 serait le numéro de ligne contenant cette chaîne.

La syntaxe que j'utilise pour grep récursivement est Sudo grep -r 'pattern' '/var/www/file.php'

Une autre question est de savoir comment obtenir des résultats qui ne correspondent pas à un modèle. Comme tous les fichiers mais pas ceux ayant une certaine chaîne?

303
sai
grep -nr SEARCHTERM file1 file2 ...
480
Miro A.

Les numéros de ligne sont imprimés avec grep -n:

grep -n pattern file.txt

Pour obtenir uniquement le numéro de ligne (sans la ligne correspondante), on peut utiliser cut:

grep -n pattern file.txt | cut -d : -f 1

Les lignes pas contenant un motif sont imprimées avec grep -v:

grep -v pattern file.txt
129
carlito

Si vous voulez seulement le numéro de ligne, faites ceci: 

grep -nr Pattern file.ext | gawk '{print $1}' FS=":"

Exemple:

$ grep -nr 9780545460262 EXT20130410.txt | gawk '{print $1}' FS=":" 
48793
52285
54023
23
Cloud Falls
grep -A20 -B20 pattern file.txt

Rechercher un modèle et afficher 20 lignes après et avant le modèle

6
emilio

Pour afficher les résultats avec les numéros de ligne, vous pouvez essayer ceci

grep "Word to search for" /path/to/file/file -nr

Le résultat devrait ressembler à ceci:

linenumber: data data data Word to search for data data
0
Fouad Djebbar

grep -nr "répertoire de recherche" répertoire

Cela vous donne la ligne avec le numéro de ligne.

0
randomguy