Suprimir: El Comando D

El comando D suprime la primera parte (hasta el retorno de carro empotrado) en un espacio de patrones multilínea y bifurca al primer comando en el script. El retorno de carro empotrado puede describirse mediante la secuencia de escape el espacio de patrones quede vacío como consecuencia de la supresión, se lee una nueva línea.

El siguiente ejemplo compacta una secuencia de líneas vacías en una sóla línea vacía.

1 > cat N.sed
2 /^$/{
3 N
4 /^\n$/D
5 }
Si la línea es vacía se lee la línea siguiente. Si esta también es vacía el espacio de patrones contiene (sin que se lea una nueva línea). Por tanto nada ha sido impreso, no se ejecuta el comnado final p que actúa por defecto. Como el espacio de trabajo contiene con el patrón especificado en línea 2 y se lee la siguiente línea. Si esta nueva línea es no vacía, no se ejecutará la orden vacía y la nueva línea no vacía.

Al ejecutar este ``script'' sobre un fichero conteniendo una secuencia de líneas en blanco:

> cat N.test
one empty
 
two empty lines
 
 
three empty lines
 
 
 
end of file
Se obtiene el resultado:
> sed -f N.sed N.test
one empty
 
two empty lines
 
three empty lines
 
end of file
Un buen ejercicio es intentar predecir la conducta de esta otra solución alternativa, en la que la supresión D es sustituida por la d:
/^$/{
N
/^\n$/d
}
¿Qué ocurrirá? ¿Es correcta esta segunda solución?

Casiano Rodríguez León
2013-04-23