Em vez de usar grep
, você pode usar o GNU sed
:
sed -e '/particular exception/,+3d' test.txt
Isso encontra linhas que correspondem a particular exception
e as exclui e as três linhas depois delas.
Eu tenho um arquivo test.txt, com conteúdos como estes:
line random text 1
line random text 2
line random text 3
line particular exception
line except detail 1
line except detail 2
line except detail 3
....
line random text 14
line random text 15
line random text 16
line particular exception
line except detail 1
line except detail 2
line except detail 3
.....
Eu quero produzir (para mais grep) a filtragem do conteúdo do arquivo onde "exceção particular" aparece e filtrar os detalhes da "exceção particular" que aparecem APÓS (todas as 3 linhas).
O comando lógico em que pensei é o seguinte:
cat test.txt | grep -v -A 3 "particular exception"
Mas não funciona como eu esperava.
Qual é a maneira correta de fazer isso?
Para algum contexto, o que estou tentando fazer é encontrar exceções em um arquivo de log, EXCETO um em particular que está constantemente se repetindo, então primeiro eu quero limpá-lo.
Em vez de usar grep
, você pode usar o GNU sed
:
sed -e '/particular exception/,+3d' test.txt
Isso encontra linhas que correspondem a particular exception
e as exclui e as três linhas depois delas.
Usando awk
:
$ awk -v n=3 -v p='particular exception' 'match($0,p) { skip=n+1 } --skip < 0' test.txt
line random text 1
line random text 2
line random text 3
....
line random text 14
line random text 15
line random text 16
.....
O número de linhas de contexto à direita para ignorar é dado na linha de comando com, e. -v n=3
e a expressão regular para correspondência também são dadas na linha de comando como -v p='expression'
.
A variável skip
será reduzida em um para cada linha lida e o script imprimirá a linha atual sempre que a variável skip
for menor que zero. Quando o padrão de interesse é encontrado, a variável skip
obtém o valor de n + 1
, o que significa que a linha atual e as linhas n
a mais serão ignoradas.
match($0,p)
também pode ser escrito $0 ~ p
.