Por que o sed não remove minhas linhas vazias?

Por que o sed não remove minhas linhas vazias?

Por que este comando sed não remove linhas vazias?

sed -e 's/\r//g' -e '/^{$/d' -e '/^}$/d' -e ':begin;$!N;/^state-text: {[[:space:]]\n/s/\n//;tbegin;P;D' -e "s/'/''/g" -e '/^$/d' <<< $myvar

Este comando funciona bem, exceto a última parte -e '/^$/d' para remover as linhas vazias que parecem não estar fazendo nada. Aqui está uma amostra do meu conteúdo:

begin dump

Ctrl_ID:100

Este é o mesmo conteúdo visualizado com cat -A

begin dump$
$
Ctrl_ID:100$

Examinar a linha vazia com um editor hexadecimal mostra que tudo o que ela contém é um único caractere com valor hexadecimal

0A

Qual é exatamente o mesmo código no final de cada linha.

Eu não entendo o que está acontecendo aqui.

^$deve combinar, não?

Responder1

Tente isto (a remoção de linha vazia agora está na primeira posição):

sed -e '/^$/d' -e 's/\r//g' -e '/^{$/d' -e '/^}$/d' -e ':begin;$!N;/^state-text: {[[:space:]]\n/s/\n//;tbegin;P;D' -e "s/'/''/g" <<< $myvar

A parte responsável pela remoção de linha vazia que não funciona é esta:

-e ':begin;$!N;/^state-text: {[[:space:]]\n/s/\n//;tbegin;P;D'

indo mais fundo...

D exclui o conteúdo do espaço de padrões, até a primeira nova linha (ou até o final, se não houver nova linha), e inicia um novo ciclo. O último significa que quaisquer comandos que venham depois de D no programa sed não serão executados se o próprio D for executado.

deaqui

informação relacionada