Saltar la navegación

Comando N (Next)

El comando N (Next) realiza por orden las siguientes acciones:

  1. Añade el carácter \n (nueva línea) a la zona de trabajo, a menos que sed se esté ejecutando con la opción -z y entonces añadirá \0 (NUL).
  2. Añade la siguiente línea del flujo de entrada a la zona de trabajo.
  3. Si el paso anterior no se puede llevar a cabo porque no hay más líneas en el flujo de entrada, como extensión GNU, sed no ejecuta más comandos y termina el ciclo, pero si quisiéramos que no terminara el ciclo deberíamos solicitar el comportamiento estándar con la opción --posix.

Con el siguiente ejemplo, creamos líneas que contienen una IP y la MAC de la tarjeta a la que se le pondrá la IP:

$ cat ip-mac.txt 
192.168.12.14
aa:83:32:33:32:14
192.168.12.15
aa:83:32:3b:ca:04
192.168.12.16
aa:83:32:34:21:56
$ sed "N ; s/\n/ /" ip-mac.txt
192.168.12.14 aa:83:32:33:32:14
192.168.12.15 aa:83:32:3b:ca:04
192.168.12.16 aa:83:32:34:21:56

Podríamos numerar las líneas del flujo de entrada así:

$ sed '=' f g | sed 'N ; s/\n/ /'
1 uno
2 dos
3 tres
4 cuatro

Veamos la diferencia entre terminar el ciclo (extensión GNU) o no (estándar) cuando no se puede leer ninguna línea más:

$ seq 3 | sed 'N' 
1
2
3
$ seq 3 | sed --posix 'N'
1
2

El segundo ciclo comienza leyendo la línea del 3, al actuar N ya no hay más líneas, como la extensión GNU obliga a terminar el ciclo antes de finalizar la ejecución de sed, se manda a la salida estándar la zona de trabajo y por lo tanto vemos el 3 por la pantalla, en cambio, el comportamiento estándar simplemente finaliza la ejecución de sed, evitando que se muestre la zona de trabajo.