El comando Sed o Stream Editor es una utilidad muy potente que ofrecen los sistemas Linux/Unix. Se utiliza principalmente para la sustitución de texto , encontrar & reemplazar pero también puede realizar otras manipulaciones de texto como inserción, eliminación, búsqueda, etc. Con SED, podemos editar archivos completos sin tener que abrirlos. Sed también soporta el uso de expresiones regulares, lo que hace de sed una herramienta de manipulación de pruebas aún más potente.

En este artículo, aprenderemos a utilizar el comando SED con la ayuda de algunos ejemplos. La sintaxis básica para usar el comando sed es,

sed OPTIONS…

Sed-Command-Options

Ahora veamos algunos ejemplos.

Ejemplo :1) Visualización de texto parcial de un archivo

Con sed, podemos ver sólo una parte de un archivo en lugar de ver todo el archivo. Para ver algunas líneas del archivo, utilice el siguiente comando,

$ sed -n 22,29p testfile.txt

aquí, la opción ‘n’ suprime la impresión de todo el archivo & la opción ‘p’ imprimirá sólo las líneas del 22 al 29.

Ejemplo :2) Mostrar todo excepto algunas líneas

Para mostrar todo el contenido de un archivo excepto alguna parte, utilice el siguiente comando,

$ sed 22,29d testfile.txt

La opción ‘d’ eliminará las líneas mencionadas de la salida.

Ejemplo :3) Mostrar cada 3ª línea a partir de la línea N

Para mostrar el contenido de cada 3ª línea a partir de la línea número 2 o cualquier otra línea, utilice el siguiente comando

$ sed -n '2~3p' file.txt

Ejemplo :4 ) Borrar una línea con el comando sed

Para borrar una línea con sed de un archivo, utilice el siguiente comando,

$ sed Nd testfile.txt

Donde ‘N’ es el número de línea & la opción ‘d’ borrará el número de línea mencionado. Para borrar la última línea del archivo, utilice

$ sed $d testfile.txt

Ejemplo :5) Borrar un rango de líneas

Para borrar un rango de líneas del archivo, ejecute

$ sed '29,34d' testfile.txt

Esto borrará las líneas 29 a 34 del archivo testfile.txt.

Ejemplo :6) Eliminación de líneas distintas a las mencionadas

Para eliminar líneas distintas a las mencionadas de un archivo, utilizaremos ‘!’

$ sed '29,34!d' testfile.txt

Aquí se utiliza la opción ‘!’ como no, por lo que invertirá la condición es decir, no eliminará las líneas mencionadas. Todas las líneas que no sean la 29-34 se borrarán de los archivos testfile.txt.

Ejemplo :7) Añadir líneas/espacios en blanco

Para añadir una línea en blanco después de cada línea no en blanco, utilizaremos la opción ‘G’,

$ sed G testfile.txt

Ejemplo :8) Buscar y reemplazar una cadena usando sed

Para buscar & reemplazar una cadena del archivo, usaremos el siguiente ejemplo,

$ sed 's/danger/safety/' testfile.txt

Aquí la opción ‘s’ buscará la palabra ‘peligro’ & reemplazándola por ‘seguridad’ en cada línea sólo para la primera ocurrencia.

Ejemplo :9) Buscar y reemplazar una cadena de todo el archivo usando sed

Para reemplazar la palabra completamente del archivo, usaremos la opción ‘g’ con ‘s’,

$ sed 's/danger/safety/g' testfile.txt

Ejemplo :10) Reemplazar la enésima ocurrencia del patrón de cadena

También podemos sustituir una cadena en la enésima ocurrencia de un archivo. Como reemplazar ‘peligro’ por ‘seguridad’ sólo en la segunda ocurrencia,

$ sed ‘s/danger/safety/2’ testfile.txt

Para reemplazar ‘peligro’ en la segunda ocurrencia de cada línea de todo el archivo, utilice

$ sed 's/danger/safety/2g' testfile.txt

Ejemplo :11) Reemplazar una cadena en una línea concreta

Para reemplazar una cadena sólo de una línea concreta, usa

$ sed '4 s/danger/safety/' testfile.txt

Esto sólo sustituirá la cadena de la 4ª línea del archivo. También podemos mencionar un rango de líneas en lugar de una sola línea,

$ sed '4,9 s/danger/safety/' testfile.txt

Ejemplo :12) Añadir una línea después/antes de la búsqueda coincidente

Para añadir una nueva línea con algún contenido después de cada coincidencia de patrón, utilice la opción ‘a’ ,

$ sed '/danger/a "This is new line with text after match"' testfile.txt

Para añadir una nueva línea con algún contenido a antes de cada coincidencia de patrón, utilice la opción ‘i’,

$ sed '/danger/i "This is new line with text before match" ' testfile.txt

Ejemplo :13) Cambiar una línea entera con el patrón coincidente

Para cambiar una línea entera a una nueva línea cuando un patrón de búsqueda coincide necesitamos usar la opción ‘c’ con sed,

$ sed '/danger/c "This will be the new line" ' testfile.txt

Así que cuando el patrón coincide con

peligro

Toda la línea será cambiada a la línea mencionada.

Opciones avanzadas con sed

Hasta ahora sólo estábamos usando expresiones simples con sed, ahora discutiremos algunos usos avanzados de sed con regex,

Ejemplo :14) Ejecutar múltiples comandos sed

Si necesitamos realizar múltiples expresiones sed, podemos utilizar la opción ‘e’ para encadenar los comandos sed,

$ sed -e 's/danger/safety/g' -e 's/hate/love/' testfile.txt

Ejemplo :15) Hacer una copia de seguridad antes de editar un archivo

Para crear una copia de seguridad de un archivo antes de que lo editemos, utiliza la opción ‘-i.bak’,

$ sed -i.bak -e 's/danger/safety/g' testfile.txt

Esto creará una copia de seguridad del archivo con extensión .bak. También puede utilizar otra extensión si lo desea.

Ejemplo :16) Borrar una línea del archivo que comienza con & que termina con un patrón

Para borrar una línea que comienza con una cadena determinada & que termina con otra cadena, usa

$ sed -e 's/^danger.*stops$//g' testfile.txt

Esto borrará la línea con en el inicio & en el final & puede tener cualquier número de palabras en medio , ‘.*’ define esa parte.

Ejemplo :17) Añadiendo líneas

Para añadir algo de contenido antes de cada línea con sed & regex, usa

$ sed -e 's/.*/testing sed &/' testfile.txt

Así que ahora cada línea tendrá ‘testing sed’ antes de ella.

Ejemplo :18) Eliminar todas las líneas comentadas & líneas vacías

Para eliminar todas las líneas comentadas es decir líneas con # & todas las líneas vacías, utilice

$ sed -e 's/#.*//;/^$/d' testfile.txt

Para eliminar sólo las líneas comentadas, utilice

$ sed -e 's/#.*//' testfile.txt

Ejemplo :19) Obtener la lista de todos los nombres de usuario de /etc/passwd

Para obtener la lista de todos los nombres de usuario del archivo /etc/passwd, usa

$ sed 's/\(*\).*/\1/' /etc/passwd

se generará en pantalla una lista completa de todos los nombres de usuario como salida.

Ejemplo :20) Evitar la sobreescritura de enlaces del sistema con el comando sed

Se sabe que el comando ‘sed -i’ elimina los enlaces del sistema & creando sólo archivos normales en lugar del archivo de enlace. Así que para evitar tal situación & evitar que ‘sed -i’ destruya los enlaces, utilice las opciones ‘-follow-symklinks’ con el comando que se ejecuta.

Supongamos que quiero desactivar SELinux en CentOS o RHEL Severs

# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *