Ottieni il numero di riga mentre usi grep


360

Sto usando grep ricorsivo per cercare i file per una stringa e tutti i file corrispondenti e le linee contenenti quella stringa sono stampati sul terminale. Ma è possibile ottenere anche i numeri di riga di quelle righe ??

es: attualmente quello che ottengo è /var/www/file.php: $options = "this.target", ma quello che sto cercando di ottenere è /var/www/file.php: 1142 $options = "this.target";, beh, dove 1142sarebbe il numero di riga che contiene quella stringa.

La sintassi che sto usando per grep ricorsivamente lo è sudo grep -r 'pattern' '/var/www/file.php'

Un'altra domanda è: come possiamo ottenere risultati non uguali a uno schema. Come tutti i file ma non quelli con una determinata stringa?


Il flag -v mostrerà le linee che non corrispondono (grep -v myText MyFile.txt)
bcarroll

Risposte:


546
grep -n SEARCHTERM file1 file2 ...

Ho avuto un'altra domanda veloce, come possiamo ottenere risultati non uguali a uno schema. Come tutti i file ma non quelli con una determinata stringa?
Sai,

5
sarebbe l'opzione della riga di comando -v. Se esegui 'grep --help' verranno visualizzate tutte le opzioni
Miro A.

56
Non è necessario -rse si specificano più file. È necessario solo -rse si specificano le directory.
Sparhawk,

@JeanPaul - Vedo lo stesso risultato per -nr e -n -r. Quale versione di grep stai usando? $ grep -n -r name * | wc -l 1984 $ grep -nr nome * | wc -l 1984 $ grep -V grep (BSD grep) 2.5.1-FreeBSD
Miro A.

Codice solo risposta, nessuna spiegazione. : S
Florian Castelain,

148

I numeri di riga sono stampati con grep -n:

grep -n pattern file.txt

Per ottenere solo il numero di riga (senza la riga corrispondente), è possibile utilizzare cut:

grep -n pattern file.txt | cut -d : -f 1

Le linee che non contengono un motivo sono stampate con grep -v:

grep -v pattern file.txt

3
E l'ultimo numero di riga corrispondente: grep -n pattern file.txt | cut -d : -f 1 | tail -1(puoi salvarlo in una variabile e usarlo per es. File di coda da esso)
Nux

E per rimuovere il numero / due punti all'inizio di ogni stringa puoi usare qualcosa del tipo:grep -n pattern file.txt | sed 's/^[0-9][0-9]*://'
leetbacoon

24

Se si desidera solo il numero di riga, procedere come segue:

grep -nr Pattern file.ext | gawk '{print $1}' FS=":"

Esempio:

$ grep -nr 9780545460262 EXT20130410.txt | gawk '{print $1}' FS=":" 
48793
52285
54023

1
awk -F: '{print $1}'anche funziona e che non è necessario -ra grepquando viene utilizzato su file (solo le directory possono essere cercati in modo ricorsivo)
Stuart Cardall

7
grep -A20 -B20 pattern file.txt

Cerca il modello e mostra 20 righe dopo e prima del modello


11
Questo non è affatto quello che è stato chiesto.
Jonathon Reinhart,

3
Inoltre, -C20è una versione più breve se è quello che si voleva
Marty Neal,

0

grep -nr "directory di ricerca"

Questo ti dà la linea con il numero di linea.


0

Per visualizzare i risultati con i numeri di riga, è possibile provare questo

grep -nr "word to search for" /path/to/file/file 

Il risultato dovrebbe essere qualcosa del genere:

linenumber: other data "word to search for" other data
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.