search - strings - unix grep examples
grep un file, ma mostra diverse linee circostanti? (6)
Vorrei grep
per una stringa, ma anche mostrare le cinque righe precedenti e le seguenti cinque righe, nonché la linea corrispondente. Come potrei essere in grado di fare questo?
ripgrep
Se ti interessa il rendimento, usa ripgrep
che ha sintassi simile a grep
, ad es
rg -C5 "pattern" .
-C
,--context NUM
- Mostra NUM righe prima e dopo ogni incontro.
Ci sono anche parametri come -A
/ --after-context
e -B
/ --before-context
.
Lo strumento è costruito sulla base del motore regex di Rust che lo rende molto efficient sui grandi dati.
Cerca "17655" in "/some/file.txt" che mostra 10 linee di contesto prima e dopo (usando Awk), output preceduto da un numero di riga seguito da due punti. Usalo su Solaris quando "grep" non supporta le opzioni "- [ACB]".
awk '
/17655/ {
for (i = (b + 1) % 10; i != b; i = (i + 1) % 10) {
print before[i]
}
print (NR ":" ($0))
a = 10
}
a-- > 0 {
print (NR ":" ($0))
}
{
before[b] = (NR ":" ($0))
b = (b + 1) % 10
}' /some/file.txt;
Io normalmente uso
grep searchstring file -C n # n for number of lines of context up and down
Molti degli strumenti come grep hanno anche file veramente grandiosi. Mi trovo spesso a riferirmi alla pagina man di grep perché c'è così tanto che puoi farci.
man grep
Molti strumenti GNU hanno anche una pagina di informazioni che può avere più informazioni utili oltre alla pagina man.
info grep
Per BSD o GNU grep
puoi usare -B num
per impostare quante righe prima della partita e -A num
per il numero di righe dopo la partita.
grep -B 3 -A 2 foo README.txt
Se vuoi lo stesso numero di linee prima e dopo puoi usare -C num
.
grep -C 3 foo README.txt
Questo mostrerà 3 righe prima e 3 righe dopo.
ack funziona con argomenti simili a grep e accetta -C
. Ma di solito è meglio per la ricerca attraverso il codice.
-A
e -B
funzioneranno, così come -C n
(per n
linee di contesto), o solo -n
(per n
linee di contesto).