web-dev-qa-db-fra.com

Trouvez le numéro de ligne où un mot spécifique apparaît avec "grep"

Est-ce que grep est capable de fournir le numéro de ligne sur lequel le mot spécifié apparaît?

Aussi, est-il possible d'utiliser grep pour rechercher un mot à partir d'une certaine ligne vers le bas?

41
One Two Three

Utilisation grep -n pour obtenir le numéro de ligne d'une correspondance.

Je ne pense pas qu'il y ait un moyen de faire en sorte que grep commence par un certain numéro de ligne. Pour cela, utilisez sed. Par exemple, pour commencer à la ligne 10 et imprimer le numéro de ligne et la ligne pour les lignes correspondantes, utilisez:

sed -n '10,$ { /regex/ { =; p; } }' file

Pour obtenir uniquement les numéros de ligne, vous pouvez utiliser

grep -n 'regex' | sed 's/^\([0-9]\+\):.*$/\1/'

Ou vous pouvez simplement utiliser sed:

sed -n '/regex/=' file

En combinant les deux commandes sed, vous obtenez:

sed -n '10,$ { /regex/= }' file
59
Tim Pote

Tu peux appeler tail +[line number] [file] et le diriger vers grep -n qui indique le numéro de la ligne:

tail +[line number] [file] | grep -n /regex/

Le seul problème avec cette méthode concerne les numéros de ligne signalés par grep -n sera [line number] - 1 moins que le numéro de ligne actuel dans [file].

3
mrketchup

Ou vous pouvez utiliser

   grep -n . file1 |tail -LineNumberToStartWith|grep regEx

Cela se chargera de numéroter les lignes du fichier

   grep -n . file1 

Ceci imprimera le dernier numéro de ligne au début

   tail -LineNumberToStartWith

Et enfin, les lignes désirées seront grpées (ce qui inclura le numéro de ligne comme dans le fichier original)

grep regEX
2
mawia