Manual de SED
Manual de SED
Manual de SED
comando ed, por lo cual es fcil de aprender, una vez conocido el propio comando ed. Un editor de cadenas es usado para realizar transformaciones de texto bsicas de una cadena de entrada (un archivo o la salida de un pipe). A diferencia de otros editores comunes, sed hace solo una revisin sobre cada entrada, por lo cual es mas eficiente, en especial lo es, cuando filtra texto que pasa por una unin pipe. Cuando sed filtra un archivo, no altera su contenido, todos los cambios los realiza sobre la salida que imprime. Sed despliega cada rengln automticamente y por ello p no se necesita despus del comando de sustitucin (s, por ejemplo s/old/new/ ). Las comillas son indispensables pues existen metacaracters de sed que tienen significado especial para el shell sobre el cual se ejecuta. El comando sed tiene una limitacin que no se encuentra en ed: no maneja nmeros relativos de rengln. En particular, + y - no son entendidos como expresiones para indicar nmeros de rengln, por lo cual resulta imposible de retroceder a uno o mas renglones anteriores o hacer direccionamientos relativos hacia adelante. Esto se debe a que una vez ledo un rengln, el anterior se pierde para siempre; no hay manera de identificar el penltimo rengln. En la lista de comandos puede existir cualquiera de los listados ms adelante. Cuando se hace uso de uno solo, basta con encerrarlo entre comillas simples como sigue: sed 's/old/new/' archivo Pero en el caso de que necesitemos ejecutar varios comandos sobre un mismo archivo, es necesario que estos se encuentren en diferentes lineas, por ejemplo: sed 's/^/ / 3q' archivo
No hay que olvidar que antes de escribir el primer comando, se deben abrir las comillas simples y las mismas se deben cerrar despus de teclear el ltimo comando. Tambin es posible almacenar los comandos dentro de un archivo y llamarlo a la hora de que se ejecute sed con el parmetro -f. Por ejemplo: sed -f cmdarchivo archivo_texto Se pueden utilizar otros selectores o patrones antes de cada comando, por ejemplo: sed '/patron/q' Imprime cada linea de archivo hasta encontrar aquella que contenga el patron sed '/patron/d' Cancela todas las lineas que contengan el patron y no se imprimen
Incluso si se desea el resultado inverso a lo que realiza un comando, basta con agregar un '!' antes del comando. Por ejemplo, para los dos ejemplos anteriores se prosigue como sigue: sed '/patron/!q' No imprime c/lnea de archivo hasta encontrar aquella que contenga el patron sed '/patron/!d' No cancela todas las lineas que contengan el patron y no se imprimen Sintaxis La sintaxis de sed es la siguiente sed [-n] [-V] [--quiet] [--silent] [--version] [--help] [-e script] [--expression=script] [-f script-file] [--file=script-file] [script-if-no-other-script] [file...] -----------------------------------------------------------------------------------------------V --version Imprime la versin de sed y nota de copyright. -h --help Imprime un resumen de todas las opciones de sed. -n --quiet --silent Por defecto, sed imprime cada linea cuando termina de editarla. Esta opcin deshabilita la impresin automtica y no se produce ninguna salida, excepto que se incluya el comando p. -e script --expression=script Agrega los comandos de la cadena script, encerrada entre comillas simples, a la lista de comandos para ser ejecutados mientras se procesa la entrada. -f script-file --file=script-file Agrega los comandos contenidos en el archivo script para ser procesados sobre la entrada. Si ninguno de los dos parmetros anteriores es utilizado, en cualquiera de sus formas, sed tomar como comandos la primer expresin que no sea opcin de sed como argumento para ejecutar como si fuera script. Comandos ================================================ A continuacin se presenta una lista de comandos que se pueden utilizar para filtrar una entrada con sed, as mismo se incluyen algunos ejemplos para una mayor comprensin. ** Sustitucin ** Su funcin es sustituir una cadena old por una nueva new en cada linea que procese. Su sintaxis es la siguiente: s/old/new/ Ejemplo: sed 's/casa/carro/' contrato.txt Sustituye la cadena 'casa' por 'carro' en contrato.txt sed 's/^/.-/' arch.txt Agrega la cadena '.-' al inicio de cada linea de arch.txt sed 's/^/\ /' arch.txt Agrega un salto de linea al final de cada linea de arch.txt
Otro comando que puede ser til es y, el cual remplaza cada caracter procedente de old con el caracter correspondiente proveniente de new. Aqui no se admiten rangos. Su sintaxis es: y/old/new/ ** Borrado ** Su funcin es borrar a la salida, las lineas que correspondan al patrn escrito. Su sintaxis es la siguiente: /patron/d Ejemplo: sed '/calvo/d' arch.txt Elimina las lineas que contienen la cadena 'calvo' en arch.txt sed '/amor/!d' carta.txt Elimina las lineas que no tengan la palabra amor en carta.txt sed '3d' forma.txt Elimina la linea 3 del archivo forma.txt ** Impresin ** Su funcin es imprimir la salida de sed. En realidad, sed imprime automticamente la entrada filtrada, entonces si se agrega el comando p, cada linea de salida se imprimir doble. En caso de que se agregue el parmetro -n a sed, pero se quiera imprimir la salida, se agrega el comando p. Su sintaxis es la siguiente: /patron/p Ejemplo: who | sed -n '/root/p' Imprime solamente las sesiones de root who | sed '/root/p' Imprime dos veces cada sesion abierta de root who | sed -n '2p' Imprime solamente la segunda sesion que se inici en el sistema ** Abandonar filtrado ** Otro comando til para imprimir una parte de la entrada es q. Este comando termina inmediatamente las operaciones de sed, en base a la correspondencia del patrn con las lneas que este procesando. Su sintaxis es la siguiente: /patron/q Ejemplo: sed '3q' forma.txt Imprime hasta la linea 3 del archivo forma.txt sed '/clavo/q' arch.txt Imprime desde la lnea 1 de arch.txt hasta encontrar aquella que contiene la palabra 'clavo'. ** Insercin de texto ** Este comando inserta o agrega texto a cada lnea que procesa sed. El texto debe estar localizado en las siguientes lineas que proceden despus del caracter '\'. Su sintaxis es la siguiente: i \ y a\ [ texto a agregar ] Ejemplo: sed 'i \ .' oraciones.txt Agrega un punto final a cada linea de oraciones.txt
sed 'a \ ' doble.txt Agrega un salto de linea al final de cada linea de doble.txt ** Guardar la entrada filtrada en un archivo ** Este comando permite salvar la entrada filtrada en otro archivo. Su sintaxis es la siguiente: /patron/w archivo Ejemplo: sed '/pat/w patos.txt /pat/!w otros.txt animales.txt Guarda las lineas que concuerden con 'pat' en un archivo llamado patos.txt y los que no concuerden en el archivo otros.txt sed 's/UNIX/UNIX(TM)/gw u.out' libros.txt > salida.out Almacena toda la salida en el archivo salida.out, pero las lneas que fueron modificadas, se almacenan en u.out Funciones ================================================= ** Etiqueta ** Permite identificar una etiqueta label, si se realiza un cambio en la lnea actual. Esta es especificada por ':' y seguida del nombre de la etiqueta. Su sintaxis es como sigue: : label ** Grupo ** Indica un grupo de comandos, que inicia con un carcter '{' y termina con un '}'. ** Lectura de archivos ** Con el comando r, lee un archivo y agrega todo su contenido al final de cada lnea de entrada de sed. Su sintaxis es: nr archivo, donde n es el nmero de lnea donde pegar el texto de archivo. ** Listar lnea ** El comando es l y su funcin es hacer visibles todos los caracteres no imprimibles de cada lnea de entrada. ** Linea actual ** Se puede imprimir el nmero de la lnea actual, si se agrega el comando '='. Su sintaxis es: /patron/= ** Salto ** Permite saltar o ir a la lnea donde se encuentra una etiqueta label definida y continuar la ejecucin de sed desde ese comando. Su sintaxis es: b label Conclusin sobre los usos de sed. ==========================================
En realidad sed tiene bastante utilidad como la comprobacin de condiciones, creacin de ciclos y ramificaciones, retencin de lneas precedentes y muchos de los comandos de ed. Su uso es similar al que se ha descrito en este manual, comandos sencillos de edicin y no tanto de secuencias largas o complejas. Sed es adecuado para manejar entradas arbitrariamente grandes de forma rpida, pero ofrece una forma bastante reducida de memoria, puesto que al filtrar una siguiente lnea, ya no recuerda la anterior, por lo que no se puede regresar a filtrar la anterior y tampoco proporciona recursos para manipular nmeros. Solo es un editor de texto.