El comando G (Get hold space) le añade a la zona de trabajo un carácter nueva línea (\n) y a continuación añade el contenido de la zona auxiliar.
Como ejemplo vamos a intercambiar cada dos líneas del flujo de entrada, es decir, vamos a intercambiar entre sí la primera y segunda línea, luego, la tercera y la cuarta, y así hasta el final.
$ sed -n '1~2h ; 2~2{G ; p}' f g
dos
uno
cuatro
tres
Lo que se ha hecho es lo siguiente:
- Desactivamos el autoprint. (-n)
- Para cada línea impar la llevamos a la zona auxiliar, eliminándose la anterior. (1~2h)
- Para cada línea par hacemos dos cosas: (2~2{ ... })
- Añadimos la zona auxiliar a la zona de trabajo. (G)
- Visualizamos la zona de trabajo que contendrá dos líneas. (p)
Para este caso, también es correcto usar en el ámbito de las líneas pares la pseudolínea 0:
$ sed -n '1~2h ; 0~2{G ; p}' f g
dos
uno
cuatro
tres
Invertir todas las líneas del flujo de entrada lo podemos hacer así:
$ sed -n '1!G ; $p ; h' f g
cuatro
tres
dos
uno
La idea es llevar la primera línea a la zona auxiliar, posteriormente a la zona de trabajo se le añadirá la zona auxiliar, y se volverá a llevar a esta, así vamos dándole la vuelta a las líneas; para finalizar, solo en el último ciclo visualizamos el contenido de la zona de trabajo.