Sed es un programa UNIX simple. No crea ni edita archivos. Solo modifica los datos que pasan por su entrada y presenta los datos modificados en su salida. A pesar de eso, sed se considera una de las utilidades UNIX más poderosas que encontrará en Linux, especialmente cuando se combina con otros programas en su sistema.
Este artículo tiene como objetivo enseñar los conceptos básicos de cómo usar este pequeño programa. Además, también dará una breve descripción de la filosofía UNIX y cómo esa idea es importante para comprender cómo funciona su computadora.
¿Qué es la filosofía UNIX?
La filosofía de UNIX es la idea de que un programa solo debe hacer una sola tarea y hacerlo bien. Lo alienta a escribir programas simples que puede reutilizar para diferentes funciones en lugar de crear programas complejos que no puede reutilizar para otras tareas.
Un buen ejemplo de esto es el programa cat
. Esta es una utilidad simple que solo toma entradas y las imprime como una secuencia de texto.
La filosofía UNIX le permite utilizar el programa junto con otras utilidades del sistema. A su vez, este enfoque finalmente crea una interfaz única para su sistema que puede aprender una vez y reutilizar para diferentes contextos.
Por ejemplo, puede enviar un flujo de gato a un programa como grep
. Este es un programa simple que solo hace una sola cosa. Busca una cadena de texto en una entrada e imprime las líneas donde aparece ese texto.
Por otro lado, en su lugar, puede enviar el mismo flujo de gato a un localizador de pantalla como less
. Esto, a su vez, le permitirá desplazarse por la secuencia como si fuera un solo archivo de texto.
¿Cómo funciona SED?
Dicho esto, sed es un programa que lee un flujo de texto y lo modifica. Sin embargo, sed solo modifica el flujo de texto, lo que significa que no cambia directamente los archivos en su computadora. Esto puede resultar confuso para un principiante, ya que cualquier cambio que realice en sed no aparecerá en el disco.
A pesar de eso, sed sigue siendo una poderosa utilidad. Por ejemplo, puede ejecutar la siguiente línea para leer la salida del printf
dominio:
printf "hello\nexpertogeek\nworld\n" | sed n
Los fundamentos del uso de Sed
Sabiendo eso, es increíblemente fácil de usar sed para tareas básicas. Considere el siguiente ejemplo:
En esto, usé el n
comando para imprimir el contenido del archivo «hola».
1. Selección y recorte de secuencias de texto
Además, también puede decirle a sed que modifique este flujo de texto. Por ejemplo, puede utilizar el 2q
comando para decirle que solo imprima las dos primeras líneas del archivo «hola»:
Esto puede ser increíblemente útil si solo desea obtener las primeras líneas de un archivo de texto. Sin embargo, también puede utilizar el p
comando para decirle a sed que solo imprima un rango de líneas en un archivo.
En el ejemplo anterior, utilicé sed para imprimir la tercera y cuarta línea del archivo «hola». También puedes usar el mismo p
comando para imprimir líneas no adyacentes en su archivo de texto. Considere el siguiente ejemplo:
Con eso, le digo a sed que solo imprima la primera y la cuarta línea del archivo «hola». Esto puede ser útil si desea combinar varias líneas de diferentes flujos en un solo archivo.
Por ejemplo, puede usar sed con el >
operador para escribir la secuencia modificada en un archivo.
sed -n 1~4p hello.txt > welcome.txt
2. Eliminación de texto
Otra gran función de sed es eliminar texto en una secuencia. A diferencia de la impresión, esto le permite seleccionar las líneas de texto que desea omitir de la transmisión.
Por ejemplo, usé el d
comando para eliminar la segunda y quinta línea del archivo hello.
Una ventaja de usar esto en lugar del p
El comando es que esto le permite eliminar solo la línea que no desea. Esto es útil si desea limpiar un archivo grande o recortar una salida para mostrar solo la información que necesita.
3. Agregar texto nuevo
Con eso, también puede usar sed consigo mismo para incluir nuevos datos en su flujo de texto. Por ejemplo, puede utilizar el a
Comando para agregar una línea de texto a la secuencia actual:
sed -n 2p hello.txt | sed a\ "this is a new line"
Además, también es posible incluir archivos completos en un flujo de texto. Para hacer esto, puede usar el r
comando que le permitirá leer un solo archivo en su flujo actual. Para hacerlo, puede ejecutar el siguiente comando para incluir el archivo de bienvenida después de la segunda línea de saludo.
sed -n 2p hello.txt | sed rwelcome.txt
4. Sustitución de texto y manipulación de flujo
Un uso brillante de sed es modificar flujos existentes. Esto es cuando toma una secuencia de entrada de texto y usa las funciones integradas de sed para cambiar el contenido de la secuencia.
Esta es posiblemente la función más poderosa de sed. Como esto le brinda la capacidad de editar datos dinámicamente a medida que pasan a través de las tuberías. Por ejemplo, puede editar fácilmente la salida de un programa como si fuera un archivo de texto:
printf "hello\nexpertogeek\nworld\n" | sed s/world/website/
En este ejemplo, utilicé el s
comando para sustituir la palabra «mundo» con «sitio web». Sin embargo, a diferencia de los comandos anteriores, este comando utiliza una sintaxis específica para funcionar correctamente.
Sabiendo que, la forma general de la s
el comando se parece a esto:
s/[regex]/(string)/{options}
- La primera columna indica que este es un comando sustituto. En la mayoría de los casos, sólo tendrá que utilizar el
s
comando para modificar un flujo de texto. - La segunda columna indica la palabra que desea reemplazar utilizando expresiones regulares estructurales. Esta es una forma de describir palabras y gramática usando reglas generales. Por ejemplo, puede describir las palabras «prints», «prince» y «primer» escribiendo
pri[n,m]..
. - La tercera columna describe la palabra que desea que sea la cadena anterior. A diferencia de la columna anterior, esta columna no utiliza expresiones regulares. En su lugar, puede usar texto sin formato para describir su nueva palabra.
- La última columna le dice a sed que aplique cualquier opción adicional que necesite para una sustitución. En eso, la bandera más común que podría querer usar es
g
. Esto indica que el comando reemplazará cada instancia de la expresión regular con la nueva cadena.
5. Uso de sustitución de texto con archivos
Puedes aplicar el s
comando para manipular cualquier tipo de flujo de texto que desee. Esto es útil no solo porque le permite modificar datos sobre la marcha, sino también porque puede usarlo con casi cualquier cosa en la línea de comandos de Linux.
Por ejemplo, puede utilizar el s
comando con un archivo de texto agregando el nombre del archivo al final del comando:
sed s/hello/welcome/ hello.txt
En esto, le digo a sed que lea el archivo «hola» y reemplace la primera instancia de la palabra «hola» con «bienvenido». Luego puedo hacer esto para cada instancia de la palabra «hola» en el archivo agregando el g
opción:
sed s/hello/welcome/g hello.txt
Preguntas frecuentes
¿Es posible escribir modificaciones en un archivo usando sed?
¡Sí! Además de usar operadores de archivos, es posible usar sed para escribir directamente cualquier flujo de texto modificado en un archivo. Para hacer esto, puede usar sed con el -i
marcar o usar el w
comando para escribir la secuencia en un archivo.
Sin embargo, una cosa importante a tener en cuenta es que estos comandos no cumplen con el estándar POSIX. Esto significa que estos no funcionarán si está utilizando una versión de sed que no sea GNU.
Recibo un error «no terminado» cada vez que uso sed. ¿Está rota mi instalación?
¡De nada! Este es un problema que ocurre cuando no escribe correctamente un comando sed. Esto es común con los comandos de sustitución en los que intenta hacer coincidir o reemplazar una cadena con espacios.
Por ejemplo, ejecutar el siguiente comando dará como resultado un error «no terminado»: sed s/hello/welcome back/g hello.txt
.
Puede solucionar esto agregando el carácter de escape «\» antes de sus espacios. Este es un carácter especial que le dice a sed que incluya el espacio al buscar o reemplazar texto.
Con eso, la versión correcta del comando anterior se parece a esto: sed s/hello/welcome\ back/g hello.txt
.
Además de «g», ¿hay otras banderas que pueda usar con el comando «s»?
¡Sí! Aparte de g
también puede utilizar el p
bandera para decirle a sed que muestre las líneas modificadas.
Otra bandera que puedes usar con s
es e
. Esto le permite ejecutar comandos de shell cada vez que sed reemplaza una palabra. Por ejemplo, puede ejecutar el siguiente comando para ejecutar touch
cada vez que encuentra la palabra “hola” en el archivo: sed s/hello\ /touch\ /e hello.txt
.
Por último, también puede utilizar el i
marca para decirle a sed que no distinga entre mayúsculas y minúsculas cuando busque coincidencias. Esto es útil si desea hacer coincidir la misma palabra pero con diferentes estilos de mayúsculas y minúsculas. Por ejemplo, el siguiente comando reemplazará la palabra «hola» con «bienvenido», independientemente de su caso: sed s/HELLO/welcome/i hello.txt
.
Si toda esta charla te hizo sentir curiosidad por la línea de comandos de Linux. Puede leer nuestro artículo anterior donde hablamos sobre algunas de las indicaciones de Bash más interesantes que puede usar hoy.
Credito de imagen: Unsplash