Volver al blog

Una descripción general del editor de flujo Sed para manipular texto en Linux

Una descripción general del editor de flujo Sed para manipular texto en Linux

El comando sed es una abreviatura de stream editor (editor de flujo). Es una herramienta muy popular en sistemas Linux/UNIX. Sed no es un editor de texto por sí mismo. Sin embargo, puede realizar varias modificaciones para manipular un texto dado. La entrada de texto se envía como un flujo. Sed luego realiza las acciones indicadas en el flujo. Esta guía ofrece una visión general del sed comando y cómo operarlo para manipular texto con éxito en Linux.

Sed en Linux

El flujo de entrada de sed puede provenir de un archivo de texto o de STDIN (entrada estándar). Podemos trabajar con la salida de otro comando o trabajar directamente con un archivo de texto. La sed herramienta viene preinstalada en todas las Linux distribuciones.

Descripción general del uso de Sed

El sed comando sigue la siguiente estructura:

Para fines de demostración, hemos tomado la versión de texto de licencia GPL versión 3:

Manipulate Text with Sed 7

El siguiente sed comando imprimirá el contenido del archivo de texto:

Aquí, sed está realizando las operaciones descritas dentro de las comillas simples e imprimiendo la salida. Como no hay ninguna opción definida, sed simplemente realizará una operación en blanco e imprimirá todo el contenido del archivo.

Sed también acepta la salida de un comando diferente como flujo de entrada. En el siguiente ejemplo, canalice el contenido del archivo de texto GPL v3 a sed para realizar una operación en blanco:

Cómo imprimir líneas

Sin ninguna opción especificada, sed imprimirá todo el contenido del archivo directamente. En su lugar, podemos enviar explícitamente el comando de impresión para imprimir los resultados directamente en la salida estándar (STDOUT).

Para imprimir la salida, use el carácter p:

Manipulate Text with Sed 6

Por defecto, sed imprime la salida en la pantalla. Debido a que usamos específicamente el comando de impresión, sed imprimirá cada línea dos veces. Sed funciona línea por línea. Lee una línea, realiza operaciones específicas, la imprime y pasa a la siguiente línea.

Como podemos ver, cada línea se imprime dos veces. Si el resultado es confuso de esta manera, podemos limpiarlo usando la -n opción. Suprime la función de impresión automática. Como estamos enviando el comando de impresión, no necesitamos habilitar la función de impresión de salida predeterminada:

Clases de caracteres de expresiones regulares

En las expresiones regulares, existen varias clases de caracteres. Cada una de estas clases tiene un rango. Muchas clases también tienen múltiples expresiones. La mayoría de las clases son rangos de caracteres:

    • [a-z]: Carácter en minúscula
    • [A-Z]: Carácter en mayúscula
    • [0-9]: Dígitos
    • [a-zA-z]: Alfabeto
    • [a-zA-z0-9]: Cualquier carácter alfanumérico

Estas clases de caracteres también tienen diferentes notaciones:

    • [:lower:]: Carácter en minúscula
    • [:upper:]: Carácter en mayúscula
    • [:digit:]: Dígitos
    • [:alpha:]: Alfabeto
    • [:alphanum:]: Carácter alfanumérico

Por ejemplo, el siguiente comando imprimirá todas las líneas que contengan al menos un dígito:

Manipulate Text with Sed 3

Rangos de direcciones

Podemos especificar la parte específica del flujo de texto con la que trabajar. Puede ser la ubicación estática de una línea o un rango de líneas. En el primer ejemplo, imprimiremos la línea 5 del archivo de texto GPL v3:

$ sed -n

En lugar de una sola línea, también podemos especificar un rango de líneas con las que trabajar. Aquí, hemos indicado el rango de direcciones desde la línea 5 a la línea 9 (un total de 5 líneas) en el que sed trabajará:

gpl-3.0.txt

También existen diferentes formas de especificar la dirección de la línea. En lugar de determinar los números de línea nosotros mismos, podemos reorganizar el ejemplo anterior para que sed comience desde la línea 5 y opere en las siguientes 5 líneas:

5,+5p

Otra forma de especificar líneas es mediante el uso de intervalos. En el siguiente ejemplo, sed comenzará desde la línea 1 y operará en líneas alternas:

Eliminación de texto

Hasta ahora, hemos trabajado en la impresión de líneas de texto de destino. En lugar de imprimir, podemos eliminar las líneas de la salida. En el siguiente ejemplo, eliminaremos varias líneas desde el principio. Aquí, no necesitamos usar la opción -n porque queremos que sed imprima todo lo demás que no se haya eliminado. Para la eliminación de líneas, utilizaremos la opción d:

Manipulate Text with Sed 2

Ten en cuenta que el archivo de origen sigue intacto. Sed solo está realizando la eliminación de líneas durante la salida. Si lo deseas, puedes guardar la salida de sed en un archivo. Puedes sobrescribir el archivo original o guardarlo como uno diferente:

En lugar de escribir manualmente la salida en un archivo, sed puede realizar una edición in situ en el archivo original. En resumen, sed editará el archivo original y escribirá los cambios realizados. Este método sobrescribirá el archivo original, por lo que debe usarse con cuidado:

Debido a que la edición in situ es peligrosa, sed viene con la función de copia de seguridad. Al realizar ediciones in situ, utiliza -i.bak en lugar de -i para hacer una copia de seguridad antes de editar. Sed creará el archivo de copia de seguridad con la extensión .bak :

Sustitución de texto

Esta es, con diferencia, una de las implementaciones más comunes de sed. Busca un patrón de texto y lo reemplaza con un texto dado. Aquí, el patrón de texto se describe en expresiones regulares (regex para abreviar). Para obtener más información sobre el uso de regex, sigue este tutorial que describe cómo usar Grep con regex para buscar patrones de texto en archivos.

Aquí tienes un ejemplo de la sustitución de texto más básica usando regex:

Aquí, s es el comando para la sustitución. Las barras diagonales son delimitadores para el patrón y el reemplazo. Pongámoslo en acción:

Manipulate Text with Sed 5

El siguiente ejemplo demostrará el uso del guion bajo (_). Aquí, los guiones bajos actuarán como delimitadores:

Aquí, estamos buscando com/index para cambiarlo por net/home. Ten en cuenta la ubicación de los guiones bajos, ya que es muy crucial. Por ejemplo, si te falta el último guion bajo, sed arrojará un error:

Necesitamos un archivo de prueba para practicar alguna sustitución. Aquí tengo una versión recortada del archivo de texto GPL v3:

Realicemos algunas sustituciones de texto básicas:

Echa un vistazo al siguiente ejemplo. Queremos cambiar todas las instancias de the a THE :

$ echo

¿Notas algo? Sed no cambió todas las instancias de the. De hecho, solo cambió la primera instancia. ¿Qué está pasando? Este es el comportamiento predeterminado de la opción s. Solo coincide con la primera instancia de una línea dada y pasa a la siguiente. Para asegurarse de que sed busque el patrón de búsqueda en toda la línea, necesitamos usar una bandera opcional g. Corrijamos el comando:

Ahora funciona como se esperaba. Otra forma interesante de usar el comando es especificando el número de instancias a cambiar. En el ejemplo anterior, había 3 instancias de the, ¿verdad? ¿Qué tal si especificamos cambiar solo la 3ra instancia? El cambio ocurrirá en la bandera opcional:

Si estás trabajando con un archivo de texto grande, entonces puede ayudar que sed imprima solo aquellas líneas donde se realizaron las sustituciones. Para lograr eso, necesitamos agregar otra bandera adicional p:

Manipulate Text with Sed 4

Sensibilidad a mayúsculas y minúsculas

Por defecto, todas las sed operaciones distinguen entre mayúsculas y minúsculas. El siguiente comando demostrará el comportamiento por defecto de la sensibilidad a mayúsculas y minúsculas:

$ echo "HELLO WORLD"

Debido a la discrepancia de mayúsculas y minúsculas, no hay cambios. En tal situación, podemos decirle a sed que desactive la sensibilidad a mayúsculas y minúsculas. Para hacerlo, añade la bandera opcional i:

Cómo reemplazar y referenciar textos

El poder de sed reside principalmente en su capacidad para usar expresiones regulares. Con patrones de expresiones regulares más avanzados y complejos, podemos lograr mucho más. Por ejemplo, podemos sustituir texto desde el principio de un archivo hasta una ubicación determinada. Echa un vistazo a la siguiente expresión:

Aquí, el símbolo de intercalación (^) denota el inicio de la línea. El operador para coincidir con cualquier carácter se representa mediante el punto (.). El asterisco (*) es la expresión comodín, que coincide desde el principio de la línea hasta GNU.

Otro truco interesante es usar el símbolo &. Podemos usarlo para resaltar las áreas que sed encuentra con el patrón de búsqueda:

Manipulate Text with Sed

Reflexiones finales

En este tutorial, exploramos los conceptos básicos del comando sed . Aprendimos a imprimir líneas específicas, buscar textos, eliminar y reemplazar textos, sobrescribir textos y usar expresiones regulares. Un comando sed construido correctamente puede transformar drásticamente un documento de texto. Ahora puedes manipular texto con éxito en Linux con la ayuda de sed.

¡Feliz computación!

author

Hark Labs

Autor · CloudSigma

Preslav Dobrev es diseñador creativo en CloudSigma, centrado en una identidad empresarial coherente mediante el uso de canales de marketing tradicionales e innovadores. Es experto en fusionar la visión artística con el marketing estratégico para crear narrativas de marca impactantes.

Comentarios

Aún no hay comentarios. Sea el primero.