Todos los usuarios de computadoras en el mundo, tarde o temprano, modificarán una cadena de texto, ya sea de forma manual o automática. Sea presentado a la editor de flujo sed, que le posibilita realizar modificaciones masivas de texto en cadenas y archivos.
Expresiones regulares en la línea de comandos
El editor de secuencia sed, una herramienta disponible de forma predeterminada en muchas distribuciones de Linux, le posibilita analizar y transformar texto de una manera fácil y directa, ya sea que dicho texto esté dentro de archivos o simplemente cadenas simples en la línea de comandos. Además puede analizar listas de directorios, resultados de listas de procesos y la mayoría de los otros tipos de información que pueden fluir dentro o fuera de su sesión de terminal.
Para verificar si sed está habilitada en su distribución de Linux, escriba sed --version
en la línea de comando:
No se preocupe si su versión es un poco más antigua que la que se muestra aquí. Casi definitivamente estará bien para los ejemplos que discutimos aquí. Si la herramienta no está habilitada en su distribución, puede instalarla usando sudo apt install sed
para sistemas operativos basados en Ubuntu / Debian, o sudo yum install sed
para sistemas operativos basados en RedHat / RPM.
sed
aplica una pequeña transformación de texto usando lo que se llama una expresión regular o expresión regular. Una expresión regular es una forma y método de expresar operaciones de búsqueda, reemplazo y modificación sustentadas en texto más complejas en un formato aún legible por humanos. Las expresiones regulares son complicadas y pueden resultar difíciles de leer para los principiantes. Puede leer nuestra guía, ¿Cómo se utiliza verdaderamente Regex? Para obtener más información acerca de cómo leer y escribir Regex.
RELACIONADO: ¿Cómo se utiliza verdaderamente Regex?
Para el propósito de este post, nos quedaremos con expresiones regulares fáciles de comprender y leer. A modo de ejemplo, el siguiente es un reemplazo simple:
Como puede ver, hicimos eco de un pequeño fragmento de texto y, posteriormente, lo transformamos usando la herramienta sed. Empleamos el uso del comando sed ‘s’ (sustituto) e indicamos lo que queríamos cambiar. Puede leer esto de otra manera como s|from|to|
donde ‘|’ es el separador entre secciones / campos, ‘s’ es el comando y ‘desde’ y ‘hasta’ son las dos opciones pasadas al comando ‘s’.
Por eso, transformamos ‘¡Hola, fans de las tecnologías de la información de la nube!’ a «¡Hola, fans de systempeaker.com!» cambiando solo una parte del texto usando el editor de flujo sed. Tomemos un ejemplo un poco más complejo.
Aquí primero creamos un archivo con 3 líneas usando el echo
comando con redirección a un archivo (‘>’ crea un nuevo archivo, sobrescribiendo un archivo con el mismo nombre si existe, y ‘>>’ se agrega a un archivo sin modificarlo de otra manera). A continuación, mostramos el contenido del archivo usando el cat
mando.
Posteriormente transformamos el contenido del archivo con el sed
herramienta de forma directa. Para hacerlo, especificamos la opción ‘-i’ para sed que edita el archivo en el lugar. La instrucción de transformación textual real es la misma que antes. Y por último especificamos el nombre del archivo al final del comando. Posteriormente verificamos el contenido del archivo y notamos cómo ha cambiado nuestra entrada.
Como puede comenzar a ver, o ya sabe por experiencias pasadas, hay mucho poder disponible en la herramienta sed.
Condimentemos un poco las cosas ampliando nuestra expresión regular y método de escritura de la instrucción de transformación de texto sed:
En este ejemplo, sustituimos la letra ‘h’ por ‘_H’ y lo hicimos de forma global (observe el calificador ‘g’ cerca del final de la primera instrucción pasada a sed) y sin distinción entre mayúsculas y minúsculas (observe la ‘i’ calificador además cerca del final de la primera instrucción). La ‘h’ coincide aún cuando el archivo contenga ‘H’ debido al calificador ‘i’.
Posteriormente empezamos una nueva instrucción (las instrucciones terminan / terminan con ‘;’ del mismo modo que en muchos otros lenguajes de codificación) en la que eliminamos ‘.com’ simplemente buscándolo y reemplazándolo con nada.
Tenga en cuenta además cómo hemos utilizado diferentes separadores de alternativas de campo / comando. En el primer ejemplo usamos ‘|’ que en general es un separador de campo fácil de utilizar y bastante poco común. Mucha gente utiliza ‘/’, aún cuando esto puede generar problemas al analizar los nombres de las rutas que a menudo contienen ‘/’.
Poder utilizar diferentes separadores de alternativas de campo / comando le posibilita utilizar fácilmente otro separador si su cadena de texto verdaderamente contiene o probablemente contendrá un carácter específico.
Usando sed con archivos
Exploremos otro ejemplo basado en sed donde inyectaremos texto en un archivo:
En este ejemplo, creamos un archivo con 5 líneas y posteriormente usamos una instrucción sed ligeramente compleja para inyectar un separador ‘-‘ después de cada segunda línea. Aunque la sintaxis se explica principalmente por sí misma, es interesante notar que el comando ‘r’ (leer / agregar texto de un archivo) especifica el nombre del archivo de inyección de forma directa y mientras aún está dentro de la instrucción principal, sin ningún separador.
Además puede comenzar a ver que, al mismo tiempo de aprender una sintaxis de expresión regular, es beneficioso aprender la sintaxis sed en profundidad. Es casi como aprender dos nuevos idiomas extranjeros, pero el beneficio es que la sintaxis sed puede crecer con su necesidad de complejidad adicional.
Exploremos un ejemplo en el que reemplazamos un área de texto específica con otra cosa:
En este ejemplo, buscamos el texto ‘3’, y para esa línea sustituiremos ‘C’ por ‘Z’. Ya ves lo versátil que puede ser sed.
Para terminar, podemos analizar el análisis de otros tipos de entrada:
Como puede ver, creamos 3 archivos y solicitamos una lista de directorios usando el ls
mando. Posteriormente tomamos esa salida como entrada a sed (usando el comando de tubería de Linux, ‘|’) y transformamos parte de nuestra lista de directorios en un guión bajo.
El editor de secuencia sed es una herramienta versátil que puede ayudarlo a analizar y transformar casi cualquier texto de forma directa desde la línea de comando del terminal, ya sea que la entrada provenga de un simple echo
declaración, otras herramientas de Linux o desde un archivo de texto plano. ¡Disfrutar!