Come ottenere il numero di riga da grep?


18

Il seguente grep

grep -r -e -n coll *

verrà visualizzato

fullpath/filename:  <tag-name>coll</tag-name>

Vorrei sapere quale riga ha il seguente testo, ho provato ad aggiungere -n, ma non ha funzionato. Ho provato ad aggiungere | grep -n *, ma ha fatto qualcosa di strano.

Quello che mi piacerebbe vedere (non mi interessa il formato) è

fullpath/filename:10:  <tag-name>coll</tag-name>

1
Vedo i numeri di riga quando si utilizza l' -nopzione. Puoi pubblicare l'output di quello che ottieni?
Kris Harper,

Risposte:


18

Dovresti mettere -ealla fine dell'elenco delle opzioni:grep -rne coll *


15

non c'è bisogno di -r & -e!

ottieni il numero di riga di un modello!

grep -n "pattern" file.txt

se vuoi ottenere solo il numero di riga come output aggiungi un altro comando grep ad esso!

grep -n "pattern" file.txt | grep -Eo '^[^:]+'

1
Per ottenere solo il numero di riga, è più facile da usare cut, ad es.cut -f1 -d:
wjandrea,

1

Per visualizzare un modello in un file specifico e ottenere le linee corrispondenti:

grep -n <Pattern> <File> | awk -F: '{ print $1 }' | sort -u

o usando cutcome suggerito da @wjandrea:

grep -n <Pattern> <File> | cut -f1 -d: | sort -u

dove

  • <Pattern>è un modello glob citato (usare l'opzione -Eper regexp);
  • <File> è il file che ti interessa;
  • la prima pipe awk ...filtra i numeri di riga nell'output di grep (prima :su ogni riga);
  • la seconda pipe assicura che i numeri di riga vengano visualizzati una sola volta.

Per ottenere solo il numero di riga, è più facile da usare cutrispetto a Awk, ad esempiocut -f1 -d:
wjandrea,

@wjandrea Più facile in che modo?
Sheljohn,

Voglio dire, la sintassi è più semplice
wjandrea,

@wjandrea Sembra molto obiettivo.
Sheljohn,

@wjandrea Ci scusiamo per il sarcasmo, ho modificato per includere il tuo suggerimento :)
Sheljohn,
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.