¿Por qué sed no elimina mis líneas vacías?

¿Por qué sed no elimina mis líneas vacías?

¿Por qué este comando sed no elimina las líneas vacías?

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

Todo este comando funciona bien excepto la última parte -e '/^$/d' para eliminar las líneas vacías que parece no hacer nada en absoluto. Aquí hay una muestra de mi contenido:

begin dump

Ctrl_ID:100

Este es el mismo contenido visto con cat -A.

begin dump$
$
Ctrl_ID:100$

Examinar la línea vacía con un editor hexadecimal muestra que todo lo que contiene es un único carácter con el valor hexadecimal.

0A

Que es exactamente el mismo código al final de cada línea.

No entiendo qué está pasando aquí.

^$debería coincidir, ¿no?

Respuesta1

Pruebe esto (la eliminación de línea vacía ahora está en la primera posición):

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

La parte responsable de que la eliminación de línea vacía no funcione es esta:

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

profundizando...

D elimina el contenido del espacio de patrones, hasta la primera nueva línea (o hasta el final si no hay nueva línea) y comienza un nuevo ciclo. Esto último significa que cualquier comando que venga después de D en el programa sed no se ejecutará si se ejecuta D.

deaquí

información relacionada