sed '5,${s/^$//; t delete; b end; : delete; d; : end;}' temp_spec.rb
Editar 1:
Se supone que debo explicar esto, así ...
Esto es innecesariamente complicado. No sabía que los rangos de direcciones están permitidos dentro {}. Así que tuve que expresar "eliminar líneas vacías" de manera diferente. El comando central es tcuál es la forma de sed if ... then. Thubiera sido más fácil pero está disponible solo para GNU sed. Cito la página del manual:
etiqueta t: si as /// ha realizado una sustitución exitosa desde que se leyó la última línea de entrada y desde el último comando t o T, entonces bifurca a etiqueta; Si se omite la etiqueta, bifurca hasta el final del guión.
Abuso del famoso scomando. No reemplazará nada, solo probará si la línea está vacía. Por lo tanto, reemplaza una línea vacía por una línea vacía (podría usar cualquier cosa como reemplazo ya que la línea se elimina de todos modos).
Si sha hecho un "reemplazo", entonces la línea está vacía. En ese caso dse ejecutará el comando . De lo contrario, no se debe hacer nada. Como tno salta en caso de una sacción, necesito el comando de bifurcación bpara saltar al final del guión. : labelson objetivos de sucursal. Como en gotoaquel entonces en la edad oscura (cuando se inventó sed ... te-hee).
Otra opción sería tener s"reemplazar" todas las líneas no vacías, haciendo smás fácil el resto del comando pero más complicado:
sed '5,${s/^\(..*\)$/\1/; t end; d; : end;}' input
^..*$significa "línea no vacía" y \1significa "el contenido de los primeros corchetes".