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

2

Por que esse 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 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 o valor hexadecimal

0A

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

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

^$ deve corresponder, não?

    
por TCZ8 13.06.2014 / 15:33

1 resposta

3

Tente isso (a remoção de linha vazia está agora 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 pelo não funcionamento da linha vazia é a seguinte:

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

indo mais a fundo ...

D deletes the contents of the patterns space, up to the first newline (or to the end if there is no newline), and starts a new cycle. The latter means that any commands that come after the D in the sed program will not be executed if D itself is executed.

de aqui

    
por 13.06.2014 / 15:45