J'utilise grep récursif pour rechercher des fichiers pour une chaîne, et tous les fichiers correspondants et 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: ce que j'obtiens actuellement /var/www/file.php: $options = "this.target"
, mais ce que j'essaye d'obtenir /var/www/file.php: 1142 $options = "this.target";
, eh bien, 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 différents d'un modèle. Comme tous les fichiers mais pas ceux qui ont une certaine chaîne?
Réponses:
la source
-r
si vous spécifiez plusieurs fichiers. Vous n'avez besoin que-r
si vous spécifiez des répertoires.Les numéros de ligne sont imprimés avec
grep -n
:Pour obtenir uniquement le numéro de ligne (sans la ligne correspondante), on peut utiliser
cut
:Les lignes ne contenant pas de motif sont imprimées avec
grep -v
:la source
grep -n pattern file.txt | cut -d : -f 1 | tail -1
(vous pouvez l'enregistrer dans une variable et l'utiliser pour p.ex. le fichier de queue de celui-ci)grep -n pattern file.txt | sed 's/^[0-9][0-9]*://'
Si vous souhaitez uniquement le numéro de ligne, procédez comme suit:
Exemple:
la source
awk -F: '{print $1}'
fonctionne également et vous n'avez pas besoin-r
degrep
lorsqu'il est utilisé sur des fichiers (seuls les répertoires peuvent être recherchés récursivement)Rechercher le motif et afficher 20 lignes après et avant le motif
la source
-C20
est une version plus courte si c'est ce que l'on voulaitgrep -nr répertoire "chaîne de recherche"
Cela vous donne la ligne avec le numéro de ligne.
la source
Afin d'afficher les résultats avec les numéros de ligne, vous pouvez essayer ceci
Le résultat devrait être quelque chose comme ceci:
la source