Oi eu sou muito novo para bash programação. Eu quero uma maneira de pesquisar em um determinado texto. Para isso eu uso a grep
função:
grep -i "my_regex"
Isso funciona. Mas dado o data
seguinte:
This is the test data
This is the error data as follows
. . .
. . . .
. . . . . .
. . . . . . . . .
Error data ends
Depois de encontrar a palavra error
(usando grep -i error data
), desejo encontrar as 10 linhas que seguem a palavra error
. Portanto, minha saída deve ser:
. . .
. . . .
. . . . . .
. . . . . . . . .
Error data ends
Existem maneiras de fazer isso?
error
.Respostas:
Você pode usar as teclas
-B
e-A
para imprimir linhas antes e depois da partida.Irá imprimir as 10 linhas antes da partida, incluindo a própria linha correspondente.
fonte
test=$(grep -i -B 10 'error' data)
e imprimi-la usandoecho $test
, recebo as linhas longas retas como saída.echo "$test"
, em vez deecho $test
-C 10
imprimirá 10 linhas antes e depois de uma só vez!Isso imprime 10 linhas de contexto à direita após linhas correspondentes
Se você precisar imprimir 10 linhas do contexto inicial antes de combinar as linhas,
E se você precisar imprimir 10 linhas de contexto de saída inicial e final.
Exemplo
Grep normal
Grep linhas correspondentes exatas e 2 linhas após
Grep linhas correspondentes exatas e 2 linhas antes
Grep linhas correspondentes exatas e 2 linhas antes e depois
Referencia: manpage grep
fonte
A maneira de fazer isso está perto do topo da página do manual
fonte
Tente o seguinte:
-A 10 significa, imprima dez linhas após a correspondência para "my_regex"
fonte