Para esta tarea, usaremos el comando “sed”.
Cuento con un archivo como ejemplo, cuyo nombre es sed-prueba.txt, que contiene las siguientes líneas:
#Guia de instrucciones
1. Administracion Linux, Unix, Linux Scriting, etc.
2. Databases - Oracle, mySQL, etc.
3. Seguridad: Firewall, iptables, PF, etc.
4. Almacenamiento en Linux, etc
5. Windows- Sysadmin, reboot etc.Se han dejado algunos errores a propósito para cubrir el objetivo de esta entrada.
Antes de proseguir, haré un breve reseña del comando:
Sed es un editor de flujo. Un editor de flujo se usa para realizar transformaciones básicas de texto.
Sed
- sed es un editor “no-interactivo” orientado a flujo. Ya que no es interactivo puede usar para automatizar ediciones.
- El nombre Sed es una abreviación para “stream editor” y su utilidad se deriva de los comando del editor de línea ed. (ed fue el primer editor en UNIX).
- Esta característica permite editar mútiples archivos o realizar operaciones comunes de edición de texto sin necesidad de abrir el archivo con vi o emacs.
- sed lee desde el archivo o desde la consola y su salida se direcciona hacia la salida estandar.
Revisaremos como utilizar el comando de sustitución “s”. Este comando probablemente sea el más importante dentro de la ejecución del sed, y cuenta con diferentes opciones.
El comando “s” intenta hallar coincidencia del patrón en relación a la expresión regular REGEXP. Si la coincidencia es positiva, entonces la porción del patrón que se ha encontrado será cambiado con el reemplazo REPLACEMENT.
Sintaxis:
- $ sed ‘ADDRESSs/REGEXP/REPLACEMENT/FLAGS’ archivo
Otra sintaxis:
- $ sed ‘PATTERNs/REGEXP/REPLACEMENT/FLAGS’ archivo
veamos la explicación de la sintaxis:
- s el comando de sustitución.
- / el delimitador
- REGEXP la expresión regular para buscar
- REPLACEMENT el contenido a sustituir
FLAGS puede ser cualquiera de los siguiente;
- g reemplaza todas las instancias de REGEXP con REPLACEMENT
- n podría ser cualquier número, reemplaza N número de instancias de REGEXP with REPLACEMENT
- p si la sustitución se hizo, entonces muestra el nuevo patrón.
- i realiza la búsqueda REGEXP en modo no sensitivo a caracteres
- w salva en archivo si la sustitución fue hecha, muestra por consola el resultado del archivo dado
- Puede usarse diferente delimitadores ( uno de @ % ; : ) en vez de /
Tal como mencioné al principio, ya tengo un archivo como ejemplo. Si gusta puedes hacer una copia de éste y creas en tu propio computador un archivo y pegas, luego lo salvas con el nombre que te parezca. Así podría ser más práctico realizar las prueba tu mismo. Aquí usaré sed-prueba.txt como nombre de archivo.
Ahora bién, mostremos el contenido,
# Guia de instrucciones
1. Administracion Linux, Unix, Linux Scriting, etc.
2. Databases - Oracle, mySQL, etc.
3. Seguridad: Firewall, iptables, PF, etc.
4. Almacenamiento en Linux, etc
5. Windows- Sysadmin, reboot etc.
Comenzaré con algunos ejemplos para demostrar la acción de sustitución.
1. Sustituir la palabra “Linux” por “GNU/Linux” usando sed s//
Es importante escapar los caracteres especiales cuando se realizan manejo de expresiones regulares. De lo contrario, podemos recibir errores como este:
sed: -e expression #1, char 13: unknown option to `s'
Pues para situaciones donde el caracter a reemplazar se parece al delimitador, entonces la manera más adecuada para la sustitución es hacerlo así:
# Guia de instrucciones
1. Administracion GNU/Linux, Unix, Linux Scriting, etc.
2. Databases - Oracle, mySQL, etc.
3. Seguridad: Firewall, iptables, PF, etc.
4. Almacenamiento en GNU/Linux, etc
5. Windows- Sysadmin, reboot etc.
Se puede apreciar el cambio de la primera y cuarta línea. Ahora haré otra sustitución de la palabra “Scriting” por “Scripting”.
# Guia de instrucciones
1. Administracion Linux, Unix, Linux Scriting, etc.
2. Databases - Oracle, mySQL, etc.
3. Seguridad: Firewall, iptables, PF, etc.
4. Almacenamiento en Linux, etc
5. Windows- Sysadmin, reboot etc.
No se produjo cambio alguno. Ahora intentaremos de nuevo, pero esa vez haciendo caso omiso a mayúscula o minúscula “case-sensitive”.
# Guia de instrucciones
1. Administracion Linux, Unix, Linux Scripting, etc.
2. Databases - Oracle, mySQL, etc.
3. Seguridad: Firewall, iptables, PF, etc.
4. Almacenamiento en Linux, etc
5. Windows- Sysadmin, reboot etc.
2. Sustituir todas las apariciones de la palabra usando sed s//g
Voy a reemplazar todas las ocurrencias de la palabra “Linux” a “Linux-Unix” de manera global utilizando el flag de sustitución “g”.
# Guia de instrucciones
1. Administracion Linux-Unix, Unix, Linux-Unix Scriting, etc.
2. Databases - Oracle, mySQL, etc.
3. Seguridad: Firewall, iptables, PF, etc.
4. Almacenamiento en Linux-Unix, etc
5. Windows- Sysadmin, reboot etc.
3. Sustituir sólo la segunda ocurrencia de la palabra usando sed s//2
Tomando el resultado anterior, en la línea “1. Administracion Linux-Unix, Unix, Linux-Unix Scriting, etc.” sólo la 2da. ocurrencia de la palabra “Linux-Unix” será reemplazada por “LINUX”.
# Guia de instrucciones
1. Administracion Linux-Unix, Unix, LINUX Scriting, etc.
2. Databases - Oracle, mySQL, etc.
3. Seguridad: Firewall, iptables, PF, etc.
4. Almacenamiento en Linux-Unix, etc
5. Windows- Sysadmin, reboot etc.
4. Salvar los cambios al archivo y mostrar los cambios realizados usando sed s//gpw
En este próximo ejemplo, la sustitución se realizará con tres FLAGS. Voy a sustituir todas las ocurrencias de “Linux-Unix” a “GNU/Linux”, mostrar los cambios y también grabar esos mismos cambios en otro archivo temporal.
1. Administracion GNU-Linux, Unix, GNU-Linux Scriting, etc.
4. Almacenamiento en GNU-Linux, etc
5. Sustituir sólo cuando la línea coincide con el patrón usando sed
En este ejemplo, sí la línea coincide con el patrón “-” entonces reemplazaré todos los caracteres desde el “-” y dejarlo en blanco.
# Guia de instrucciones
1. Administracion Linux
2. Databases
3. Seguridad: Firewall, iptables, PF, etc.
4. Almacenamiento en Linux
5. Windows
Ahora haré otro ejemplo parecido, eliminando sólo el patrón “-”. Aprecie la diferencia en la sintaxis.
# Guia de instrucciones
1. Administracion Linux Unix, Unix, Linux Unix Scriting, etc.
2. Databases Oracle, mySQL, etc.
3. Seguridad: Firewall, iptables, PF, etc.
4. Almacenamiento en Linux Unix, etc
5. Windows Sysadmin, reboot etc.
6. Eliminar N número de caracteres en cada línea usando sed
Este ejemplo eliminará los últimos 3 caracteres de cada línea.
# Guia de instruccio
1. Administracion Linux-Unix, Unix, Linux-Unix Scriting, e
2. Databases - Oracle, mySQL, e
3. Seguridad: Firewall, iptables, PF, e
4. Almacenamiento en Linux-Unix,
5. Windows- Sysadmin, reboot e
7. Eliminar el comentario usando sed
Eliminar todas las líneas de comentarios de un archivo.
1. Administracion Linux-Unix, Unix, Linux-Unix Scriting, etc.
2. Databases - Oracle, mySQL, etc.
3. Seguridad: Firewall, iptables, PF, etc.
4. Almacenamiento en Linux-Unix, etc
5. Windows- Sysadmin, reboot etc.
8. Eliminar Comentarios y Líneas vacías usando sed
En este ejemplo, hay dos comando separados por “;”
- El primer comando reemplaza la línea comenzando con el caracter “#” a línea en blanco.
- El segundo comando elimina las líneas vacías.
1. Administracion Linux-Unix, Unix, Linux-Unix Scriting, etc.
2. Databases - Oracle, mySQL, etc.
3. Seguridad: Firewall, iptables, PF, etc.
4. Almacenamiento en Linux-Unix, etc
5. Windows- Sysadmin, reboot etc.
9. Eliminar etiquetas HTML de un archivo usando sed
Usaré otro archivo como ejemplo:
<li>sed es un editor “no-interactivo” orientado a flujo. Ya que no es interactivo puede usar para automatizar ediciones.</li>
<li>El nombre <strong>Sed</strong> es una abreviación para <strong>s</strong>tream <strong>ed</strong>itor y su utilidad se deriva de los comando del editor de línea <strong>ed</strong>. (<strong>ed</strong> fue el primer editor en UNIX).</li>
<li>Esta característica permite editar mútiples archivos o realizar operaciones comunes de edición de texto sin necesidad de abrir el archivo con <strong>vi</strong> o <strong>emacs</strong>.</li>
<li><strong>sed</strong> lee desde el archivo o desde la consola y su salida se direcciona hacia la salida estandar.</li>
</ul>
Con este ejemplo, la expresión regular dada en el comando sed busca la líneas que coincida con las etiquetas HTML y reemplaza con caracteres en blanco.
sed es un editor “no-interactivo” orientado a flujo. Ya que no es interactivo puede usar para automatizar ediciones.
El nombre Sed es una abreviación para stream editor y su utilidad se deriva de los comando del editor de línea ed. (ed fue el primer editor en UNIX).
Esta característica permite editar mútiples archivos o realizar operaciones comunes de edición de texto sin necesidad de abrir el archivo con vi o emacs.
sed lee desde el archivo o desde la consola y su salida se direcciona hacia la salida estandar.
Trabajo a diario en una consola de comandos, y en situaciones de contigencia donde lo importante es dar con una solución inmediata lo preciso es hacer un pequeño cambio y ya… Evito abrir el archivo. Sencillamente quiero cambiar algo dentro de un archivo de configuración y reiniciar el servicio.




