web-dev-qa-db-fra.com

Utilisation du script Bash pour rechercher le numéro de ligne de la chaîne dans un fichier

Comment puis-je utiliser un script bash pour trouver le numéro de ligne où une chaîne se produit?

Par exemple, si un fichier ressemble à ceci,

Hello I am Isaiah
This is a line of text.
This is another line of text.

et j'ai exécuté le script pour rechercher la chaîne "line", il afficherait le numéro 2, car c'est la première fois.

26
David L. Rodgers

Étant donné que votre exemple affiche uniquement le numéro de ligne de la première occurrence de la chaîne, vous recherchez peut-être:

awk '/line/{ print NR; exit }' input-file

Si vous voulez réellement toutes les occurrences (par exemple, si la sortie souhaitée de votre exemple est en fait "2\n3\n"), omettez le exit.

42
William Pursell

J'aime le commentaire de Siddhartha sur le PO. Pourquoi il ne l'a pas posté comme réponse m'échappe.

Je veux généralement juste le numéro de ligne de la première ligne qui montre ce que je recherche.

lineNum="$(grep -n "needle" haystack.txt | head -n 1 | cut -d: -f1)"

Expliqué: après la grep, prenez juste la première ligne ( num: ligne ), cut par les deux points d élimiteur et prenez le premier f ield

5
hanzo2001