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).





command-line-interface