Considere que tenho o arquivo listado abaixo. Preciso selecionar todas as linhas de cada instância do padrão regex antesWord A
do padrão regex .Word D
Word A
Word B
Word C
Word D
Word E
Word F
Word G
Word A
Word H
Word I
Word D
Word J
Word A
Word K
Word D
Word L
Word M
Word A
Word D
Observe o número variável de linhas entre A
e D
. Às vezes, D
é a próxima linha. Aqui está o que preciso que seja a saída:
Word A
Word B
Word C
Word A
Word H
Word I
Word A
Word K
Word A
Pode ser feito com awk, perl, python ou sed. Não importa, desde que esteja instalado no servidor RHEL6 onde o arquivo está.
Usando AWK:
Aqui está uma
awk
soluçãoApenas uma pequena alteração necessária para o tratamento de regex
Somente GNU sed:
Em casos mais complexos - blocos inválidos:
A macro do TXR Lisp
awk
suporta isso diretamente; orng
operador (intervalo) tem nove variantes para diversas maneiras de excluir registros do início ou do final de um intervalo:Além disso, ao contrário do operador range do Awk, ele combina com outros operadores. Por exemplo, suponha que você queira imprimir registros que estão simultaneamente em um intervalo
foo
to e em um intervalo to , não importando como esses tipos de intervalos se sobrepõem nos dados:bar
start
end
Usando
awk
:Se
Word D
corresponderWord A
sempre, o seguinte comando pode ser usado.sed
permite fazer aritmética nas especificações on-line:Ler
man sed
.