El comando g (get hold space) reemplaza la zona de trabajo por el contenido de la zona auxiliar.
Como ejemplo, vamos a convertir la primera línea del flujo de entrada en la última:
$ sed -n '1h ; 2,$p ; $g ; $p' f
dos
tres
uno
Lo que se ha hecho es lo siguiente:
- Desactivamos el autoprint, es decir, la visualización de las líneas al final de cada ciclo. Para ser más exactos, hacemos que la zona de trabajo no se envíe a la salida estándar cuando el ciclo termina. (-n)
- Solo la primera línea se traslada al área auxiliar. (1h)
- Todas las líneas menos la primera las visualizamos. (2,$p)
- Cuando estemos trabajando con la última línea, recuperamos la zona auxiliar sobre la zona de trabajo y visualizamos esta última. ($g ; $p)
Otra forma de hacer lo mismo, jugando con el ámbito y el agrupamiento de comandos, sería lo siguiente:
$ sed -n '1h ; 2,$p ; ${g ; p}' f
dos
tres
uno