Comando Sed o Editor de secuencias es una utilidad muy potente que ofrecen los sistemas Linux/Unix. Se utiliza principalmente para sustitución de texto buscar y reemplazar, pero también puede realizar otras manipulaciones de texto como inserción, supresión, búsqueda etc. Con SED, podemos editar archivos completos sin tener que abrirlo. Sed también admite el uso de expresiones regulares, lo que hace que sed sea aún más poderoso herramienta de manipulación de prueba.
En este artículo, aprenderemos a usar el comando SED con la ayuda de algunos ejemplos. La sintaxis básica para usar el comando sed es,
sed OPCIONES… [SCRIPT] [INPUTFILE…]
Ahora veamos algunos ejemplos.
Ejemplo: 1) Mostrar texto parcial de un archivo
Con sed, podemos ver solo una parte de un archivo en lugar de ver el archivo completo. Para ver algunas líneas del archivo, use el siguiente comando,
[[email protected] ~]$ sed -n 22,29p testfile.txt
aquí, la opción ‘n’ suprime la impresión de todo el archivo y la opción ‘p’ imprimirá solo las líneas de la 22 a la 29.
Ejemplo: 2) Mostrar todo excepto algunas líneas
Para mostrar todo el contenido de un archivo, excepto una parte, use el siguiente comando,
[[email protected] ~]$ sed 22,29d testfile.txt
La opción ‘d’ eliminará las líneas mencionadas de la salida.
Ejemplo: 3) Mostrar cada 3ra línea comenzando con la línea N
Muestre el contenido de cada 3ra línea comenzando con el número de línea 2 o cualquier otra línea, use el siguiente comando
[[email protected] ~]$ sed -n '2~3p' file.txt
Ejemplo: 4) Eliminar una línea usando el comando sed
Para eliminar una línea con sed de un archivo, use el siguiente comando,
[[email protected] ~]$ sed Nd testfile.txt
donde ‘N’ es el número de línea y la opción ‘d’ eliminará el número de línea mencionado. Para eliminar la última línea del archivo, utilice
[[email protected] ~]$ sed $d testfile.txt
Ejemplo: 5) Eliminación de un rango de líneas
Para eliminar un rango de líneas del archivo, ejecute
[[email protected] ~]$ sed '29,34d' testfile.txt
Esto eliminará las líneas 29 a 34 del archivo testfile.txt.
Ejemplo: 6) Eliminación de líneas que no sean las mencionadas
Para eliminar líneas que no sean las líneas mencionadas de un archivo, usaremos ‘!’
[[email protected] ~]$ sed '29,34!d' testfile.txt
aquí ‘!’ La opción se usa como no, por lo que invertirá la condición, es decir, no eliminará las líneas mencionadas. Todas las líneas restantes de la 29 a la 34 se eliminarán de los archivos testfile.txt.
Ejemplo: 7) Adición de líneas/espacios en blanco
Para agregar una línea en blanco después de cada línea que no esté en blanco, usaremos la opción ‘G’,
[[email protected] ~]$ sed G testfile.txt
Ejemplo: 8) Buscar y reemplazar una cadena usando sed
Para buscar y reemplazar una cadena del archivo, usaremos el siguiente ejemplo,
[[email protected] ~]$ sed 's/danger/safety/' testfile.txt
aquí la opción ‘s’ buscará la palabra ‘peligro’ y la reemplazará con ‘seguridad’ en cada línea solo para la primera aparición.
Ejemplo: 9) Buscar y reemplazar una cadena de un archivo completo usando sed
Para reemplazar la palabra completamente del archivo, usaremos la opción ‘g’ con ‘s’,
[[email protected] ~]$ sed 's/danger/safety/g' testfile.txt
Ejemplo: 10) Reemplace la enésima aparición del patrón de cadena
También podemos sustituir una cadena en la enésima aparición de un archivo. Como reemplazar ‘peligro’ con ‘seguridad’ solo en la segunda aparición,
[[email protected] ~]$ sed ‘s/danger/safety/2’ testfile.txt
Para reemplazar ‘peligro’ en la segunda aparición de cada línea de todo el archivo, use
[[email protected] ~]$ sed 's/danger/safety/2g' testfile.txt
Ejemplo: 11) Reemplazar una cadena en una línea en particular
Para reemplazar una cadena solo de una línea en particular, use
[[email protected] ~]$ sed '4 s/danger/safety/' testfile.txt
Esto solo sustituirá la cadena de la cuarta línea del archivo. También podemos mencionar un rango de líneas en lugar de una sola línea,
[[email protected] ~]$ sed '4,9 s/danger/safety/' testfile.txt
Ejemplo: 12) Agregar una línea después/antes de la búsqueda coincidente
Para agregar una nueva línea con algún contenido después de cada coincidencia de patrón, use la opción ‘a’,
[[email protected] ~]$ sed '/danger/a "This is new line with text after match"' testfile.txt
Para agregar una nueva línea con algo de contenido antes de cada coincidencia de patrón, use la opción ‘i’,
[[email protected] ~]$ sed '/danger/i "This is new line with text before match" ' testfile.txt
Ejemplo: 13) Cambiar una línea completa con un patrón coincidente
Para cambiar una línea completa a una nueva línea cuando un patrón de búsqueda coincide, necesitamos usar la opción ‘c’ con sed,
[[email protected] ~]$ sed '/danger/c "This will be the new line" ' testfile.txt
Entonces, cuando el patrón coincida con ‘peligro’, toda la línea se cambiará a la línea mencionada.
Opciones avanzadas con sed
Hasta ahora solo estábamos usando expresiones simples con sed, ahora discutiremos algunos usos avanzados de sed con expresiones regulares,
Ejemplo: 14) Ejecutar múltiples comandos sed
Si necesitamos realizar múltiples expresiones sed, podemos usar la opción ‘e’ para encadenar los comandos sed,
[[email protected] ~]$ 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, use la opción ‘-i.bak’,
[[email protected] ~]$ 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 usar otra extensión si lo desea.
Ejemplo: 16) Eliminar una línea de archivo que comienza y termina con un patrón
Para eliminar una línea que comienza con una cadena en particular y termina con otra cadena, use
[[email protected] ~]$ sed -e 's/^danger.*stops$//g' testfile.txt
Esto eliminará la línea con ‘peligro’ al inicio y ‘paradas’ al final y puede tener cualquier número de palabras en el medio, ‘.*’ define esa parte.
Ejemplo: 17) Agregar líneas
Para agregar algo de contenido antes de cada línea con sed y expresiones regulares, use
[[email protected] ~]$ sed -e 's/.*/testing sed &/' testfile.txt
Así que ahora cada línea tendrá ‘testing sed’ antes.
Ejemplo: 18) Eliminar todas las líneas comentadas y líneas vacías
Para eliminar todas las líneas comentadas, es decir, líneas con # y todas las líneas vacías, use
[[email protected] ~]$ sed -e 's/#.*//;/^$/d' testfile.txt
Para eliminar solo las líneas comentadas, use
[[email protected] ~]$ sed -e 's/#.*//' testfile.txt
Ejemplo: 19) Obtenga una lista de todos los nombres de usuario de /etc/passwd
Para obtener la lista de todos los nombres de usuario del archivo /etc/passwd, utilice
[[email protected] ~]$ sed 's/([^:]*).*/1/' /etc/passwd
se generará una lista completa de todos los nombres de usuario en la pantalla como salida.
Ejemplo: 20) Evite sobrescribir los enlaces del sistema con el comando sed
Se sabe que el comando ‘sed -i’ elimina los enlaces del sistema y crea solo archivos normales en lugar del archivo de enlace. Entonces, para evitar tal situación y prevenir ‘sed -i‘ de destruir los enlaces, use ‘–seguir-enlaces simbólicos‘ opciones con el comando que se está ejecutando.
Supongamos que quiero deshabilitar SELinux en CentOS o RHEL Severs
[[email protected] ~]# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
Estos fueron algunos ejemplos para mostrar sed, podemos usar estas referencias para emplearlas cuando sea necesario. Si tienen alguna consulta relacionada con este o cualquier artículo, compártanla con nosotros.
Leer también: 14 ejemplos de comandos SCP para transferir archivos de forma segura en Linux