-n
en la ejecución de sed
, el contenido del espacio
de patrones se imprimirá antes de ser eliminada. El control
pasa al comando siguiendo al comando n y no al primer
comando del script. Se trata, por tanto, de una orden que
altera la conducta habitual de sed
: Lo común es que, cuando se lee una nueva
línea, se ejecute el primer comando del guión.
El siguiente ejemplo extrae los comentarios de un programa C. Se asume que, aunque los comentarios se pueden extender sobre varias líneas, no existe mas de un comentario por línea.
$ cat n.sed # run it with: sed -n -f n.sed n.test # write commented lines in a C program #If current line matches /* ... /\/\*/{ # Comienzo de comentario, aseguremonos que la línea no casa con un cierre # de comentario. :loop /\*\//!{ p n b loop } p }Supongamos el siguiente programa de prueba:
$ cat n.test #include <stdio.h> fact(int n) { /* recursive function */ if(n == 0) return 1; else(return n*fact(n-1)); } void toto(id) { /* This function */ /* is still empty */ } main() { toto(); printf("Hello world! factorial of 4 = %d\n",fact(4)); /* the comment takes two lines */ toto(); /* and here is a comment extended on 3 lines */ }La salida al ejecutar el programa es la siguiente:
$ sed -n -f n.sed n.test fact(int n) { /* recursive function */ void toto(id) { /* This function */ /* is printf("Hello world! factorial of 4 = %d\n",fact(4)); /* the comment takes two lines */ /* and here is a comment extended on 3 lines */Observe la desaparición de la línea `` still empty */'' debido a la existencia de dos comentarios, uno de ellos inacabado en la línea anterior.
Casiano Rodríguez León