Linux es un sistema lleno de comandos donde cada uno juega un rol esencial en el comportamiento de determinadas tareas, ya sean de gestión de usuario, de objetos o de soporte, cada comando tiene su participación en Linux y uno de estos comandos es Sed del cual hablaremos en Solvetic con detalles.
A diferencia de otros editores de texto, con sed es posible filtrar texto en una canalización a medida que avanzamos sobre el contenido seleccionado.
- Podemos seleccionar texto
- Estamos en capacidad para reemplazar texto
- Permite añadir líneas al texto
- Podemos eliminar líneas del texto
- Permite modificar o bien preservar un archivo original
La sintaxis general de uso de sed es la siguiente:
sed OPCIONES... [SCRIPT] [ARCHIVO_ENTRADA...]Aprenderemos algunas formas de usar este comando en Linux.
1. Cómo usar comando SED en Linux
echo solvitic | sed 's / vitic / vetic /'En este caso estamos indicando a sed que reemplace la palabra “vitic” por “vetic”, al pulsar Enter este será el resultado:
Vemos que el cambio es automático.
2. Selección de texto con el comando SED Linux
En este caso vamos a disponer de un archivo de texto el cual esta alojado en el escritorio:
Ahora usaremos la siguiente línea:
less Solvetic.txt
Al pulsar Enter este será el resultado:
Con sed es posible seleccionar algunas líneas del archivo, para ello debemos indicar las líneas inicial y final del rango a seleccionar, por ejemplo, si deseamos extraer las líneas dos a siete ejecutamos:
sed -n '2,7p' Solvetic.txt
Veremos lo siguiente:
Debemos tener presente la coma en los rangos a asignar (2,7), el parámetro p indica significa "imprimir líneas coincidentes", con este el comando sed imprimirá todas las líneas de ese rango y la opción -n (quiet), se encarga de no mostrar el texto que no coincide con ese rango.
Podemos usar el parámetro -e (expresión) con el objetivo de realizar selecciones múltiples, por ejemplo:
sed -n -e '1,2p' -e '5,6p' Solvetic.txt
Con sed es posible seleccionar la línea de inicio, luego indicamos cual debe ser recorrido del archivo y que imprima las líneas alternas, por ejemplo, ingresamos:
sed -n '1~3p' Solvetic.txtEn este caso el primer número hace referencia a la línea de inicio y el segundo número indica a sed cuales líneas después de la línea de inicio serán desplegadas:
Otro de los usos de sed es la capacidad de seleccionar líneas en las cuales están los patrones de texto coincidentes, esto si no sabemos desde donde se origina el número de línea, podemos ejecutar lo siguiente:
sed -n '/^Ejecutar /p' Solvetic.txt
Veremos las líneas que inician con dicho termino.
3. Cómo crear reemplazos con SED Linux
En la parte básica vimos como reemplazar texto usando sed, allí usamos el parámetro -s (substitution). Luego la primera cadena indica el patrón de búsqueda y la segunda hace referencia al texto con el cual se va a reemplazar.
sed -n 's/tareas/acciones/p' Solvetic.txtEn este ejemplo reemplazamos “tareas” por “acciones”:
Con el parámetro p sed se detiene automáticamente después de la primer coincidencia, para realizar una búsqueda global y realizar el cambio en general debemos agregar “g”:
sed -n 's/tareas/acciones/gp' Solvetic.txtSi deseamos que no se distinga entre mayúsculas y minúsculas añadiremos la “i”:
sed -n 's/tareas/acciones/gpi' Solvetic.txt
Es posible crear restricciones de los reemplazos solo a ciertas secciones del archivo, en primer lugar listamos las líneas a analizar:
sed -n '1,3p' Solvetic.txt
Vamos a ver lo siguiente, podemos buscar donde haya dos espacios y reemplazarlos por uno:
sed -n '1,3 s/ */ /gp' Solvetic.txtEl asterisco (*) representa cero o más del carácter anterior seleccionado.
Es posible reducir el patrón de búsqueda a un solo espacio con el siguiente comando:
sed -n '1,3 s/ */ /gp' Solvetic.txtVemos la diferencia de los resultados:
En este último caso, el asterisco coincide con cero o más del carácter anterior, esto hace que cada caracter que no sea un espacio se vea como un "espacio cero" aplicando la orden.
Para hacer dos o más sustituciones de forma simultánea ejecutamos:
sed -n -e 's/ejecutadas/aplicadas/gip' -e 's/tareas/acciones/gip' Solvetic.txt
4. Opciones de sustitución con SED en Linux
También podemos usar sed para extraer nombres de archivos del sistema, para este caso debemos tener en cuenta que cada objeto debe coincidir con un patrón de búsqueda (subexpresiones) el cual es posible numerar (hasta máximo de nueve elementos).
Después estos números pueden ser usados para establecer una referencia a subexpresiones específicas.
La subexpresión debe ir entre paréntesis [()] y los paréntesis deben ir precedidos de una barra inclinada hacia atrás (\) para que no se detecten como un caracter normal, por ejemplo:
sed 's/\([^:]*\).*/\1/' /etc/passwd
- sed 's/: indica el comando sed y el inicio de la expresión de sustitución.
- \(: encierra la subexpresión, precedido por una barra invertida
- [^:]*: es la primera subexpresión del término de búsqueda la cual contiene un grupo entre corchetes, el signo de intercalación (^) significa "no" al ser usado en un grupo, es decir, cualquier caracter que no sea dos puntos
- \): El paréntesis de cierre [)] con una barra diagonal inversa
- .*: es la segunda subexpresión de búsqueda la cual indica "cualquier caracter y cualquier número de estos".
- /\1: es la parte de sustitución de la expresión la cual contiene un numero 1 precedido por una barra invertida (\) e indica que el texto coincide con la primera subexpresión
- /': finaliza el comando sed
Con el comando anterior hemos buscado cualquier cadena de caracteres que no contenga dos puntos, debido a que cada línea del archivo /etc/passwd inicia con el nombre de usuario terminado en dos puntos. Podemos sustituimos ese valor aislando el nombre de usuario con la siguiente orden:
sed 's/\([^:]*\)\(.*\)/\2/' /etc/passwd
Podemos desplegar solo los nombres de usuario con el siguiente comando:
sed 's/:.*//" /etc/passwdOtra de las tantas opciones con sed es usar el parámetro c (cut – cortar) para reemplazar texto en un archivo, por ejemplo:
sed '/Linux/c sistema operativo Linux' Solvetic.txt
5. Insertar líneas y texto con SED en Linux
Otra de las tareas a usar con sed es la de insertar nuevas líneas y texto en un archivo, en este caso tenemos los siguientes datos:
Podemos insertar una nueva línea especificando debajo de cual se insertará:
sed '/Ub/a --> Inserted!' Solvetic.txt
También es posible usar el comando Insertar (i) con el fin de insertar una nueva línea encima de la coincidencia:
sed '/Wi/i --> Inserted!' Solvetic.txt
Podemos hacer uso del signo ampersand (&) con el fin de añadir texto nuevo a una línea coincidente en el archivo, ejecutamos:
sed 's/.*/--> Inserted &/' Solvetic.txt
6. Cómo borrar una línea con SED Linux
Para este caso debemos usar el parámetro d (delete), para borrar por ejemplo la segunda línea ejecutamos:
sed '2d' Solvetic.txt
Podemos eliminar un rango si es necesario:
sed '1,4d' Solvetic.txtPara eliminar líneas fuera de un rango, debemos usar un signo de exclamación (!) de la siguiente forma:
sed '2,4!d' Solvetic.txt
7. Cómo guardar los cambios con SED en Linux
Para aplicar los cambios realizados, es posible usar opción In-place (-i) con el fin de que sed escriba los cambios en el archivo original, pero por mayor seguridad podemos agregar una extensión de respaldo de la siguiente forma (hemos respaldado las líneas que contienen la palabra Wi):
sed -i'.bak' '/^.*Wi.*$/d' Solvetic.txtListamos el contenido:
cat Solvetic.txt.bak
Es posible redireccionar la salida a un nuevo archivo con los mismos resultados:
sed -i'.bak' '/^.*Wi.*$/d' Solvetic.txt > Solvetic1.txt
Con sed podemos trabajar con los archivos de una manera totalmente completa en Linux ya que hemos visto cada una de sus opciones de uso.