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?
grep -nr SEARCHTERM file1 file2 ...
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
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
grep -A20 -B20 pattern file.txt
Rechercher un modèle et afficher 20 lignes après et avant le modèle
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
grep -nr "répertoire de recherche" répertoire
Cela vous donne la ligne avec le numéro de ligne.