Saltar la navegación

Comando G (Get hold space)

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:

  1. Desactivamos el autoprint. (-n)
  2. Para cada línea impar la llevamos a la zona auxiliar, eliminándose la anterior. (1~2h)
  3. Para cada línea par hacemos dos cosas: (2~2{ ... })
    1. Añadimos la zona auxiliar a la zona de trabajo. (G)
    2. 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.