Alguém pode explicar como o comando sed abaixo funciona para imprimir um parágrafo?
Comando:
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;' file
Se possível, alguém pode explicar dividindo este comando em partes para que eu possa entender completamente como modificar o comando de acordo com condições diferentes.
O comando
imprime parágrafos que contêm a string
AAA
.Isso invoca
sed
com o seguintesed
script:Versão anotada:
Assim, em suma, ele coleta linha após linha no "espaço de retenção" (um buffer de uso geral em
sed
) e, quando encontra uma linha vazia (o/./
padrão não corresponde), determina se a coleção de linhas armazenada contém a stringAAA
e imprime, se isso acontecer.Isso também é descrito em uma resposta aqui: GREP / SED ou AWK: imprima o parágrafo inteiro em um arquivo na correspondência de padrão
Dado o arquivo
Seria a saída do último parágrafo (com uma linha vazia à esquerda).
Para se livrar da linha vazia que precederá cada parágrafo de saída (se é isso que você deseja), use
Ou, na linha de comando