Mostra il nome del file e il numero di riga nell'output di grep


87

Sto provando a cercare nella mia directory rails usando grep. Sto cercando una parola specifica e voglio che grep stampi il nome del file e il numero di riga.

C'è una bandiera grep che lo farà per me? Ho provato a usare una combinazione di -ne -lma questi stanno stampando i nomi dei file senza numeri o semplicemente scaricando un sacco di testo sul terminale che non può essere letto facilmente.

ex:

  grep -ln "search" *

Devo collegarlo a awk?


Risposte:


138

Penso che -lsia troppo restrittivo in quanto sopprime l'output di -n. Suggerisco -H( --with-filename): stampa il nome del file per ogni corrispondenza.

grep -Hn "search" *

Se questo produce un output eccessivo, prova -oa stampare solo la parte che corrisponde.

grep -nHo "search" * 

Questa risposta ha funzionato anche per me. Avevo bisogno di cercare in modo ricorsivo e ho usato questo comando di esempio: grep -Hnor "localhost". Questo elenca tutte le corrispondenze con nome file e numero di riga, breve e conciso.
Tore Aurstad

Questo mostra anche il risultato e non solo il nome del file e il numero di riga
ammissibile il

30
grep -rin searchstring * | cut -d: -f1-2

Questo direbbe, cerca ricorsivamente (per la stringa searchstringin questo esempio), ignorando maiuscole e minuscole e mostra i numeri di riga. L'output di quel grep sarà simile a:

/path/to/result/file.name:100: Line in file where 'searchstring' is found.

Quindi reindirizziamo il risultato al comando di taglio utilizzando i due punti :come delimitatore di campo e visualizzando i campi da 1 a 2.

Quando non ho bisogno dei numeri di riga che uso spesso -f1(solo il nome del file e il percorso), quindi indirizza l'output a uniq, in modo da vedere ogni nome di file solo una volta:

grep -ir searchstring * | cut -d: -f1 | uniq

1
Credo che questo risponda meglio alla domanda originale. Solo nomi di file e numeri di riga.
mastaBlasta

1
Nota che questo non funziona se hai nomi di percorso assoluti di Windows come `C: \ Users \ me \ git` poiché contiene già un due punti.
assunzione

19

Mi piace usare:

grep -niro 'searchstring' <path>

Ma è solo perché dimentico sempre gli altri modi e non posso dimenticare Robert de grep -Niro per qualche motivo :)


Non avrei mai pensato di ricevere voti positivi per quanto sopra. Solo una condivisione divertente. Grazie! (Ma funziona davvero - almeno su MacOS)
Bas van Ommen

Adoro il tuo modo di ricordarlo!
Greg Hilston

0

Il commento di @ToreAurstad può essere scritto grep -Horn 'search' ./, il che è più facile da ricordare.

grep -HEroine 'search' ./ potrebbe anche funzionare;)

Per i curiosi:

$ grep --help | grep -Ee '-(H|E|r|o|i|n|e),'
  -E, --extended-regexp     PATTERNS are extended regular expressions
  -e, --regexp=PATTERNS     use PATTERNS for matching
  -i, --ignore-case         ignore case distinctions
  -n, --line-number         print line number with output lines
  -H, --with-filename       print file name with output lines
  -o, --only-matching       show only nonempty parts of lines that match
  -r, --recursive           like --directories=recurse

0

Ecco come ho usato la risposta con voto positivo per cercare un albero per trovare i file fortran contenenti una stringa:

find . -name "*.f" -exec grep -nHo the_string {} \;

Senza nHo, impari solo che qualche file, da qualche parte, corrisponde alla stringa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.