GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo usar el comando sed de Linux

Pocos comandos de Unix son tan famosos como sed, grep y awk. Se agrupan a menudo, posiblemente porque tienen nombres extraños y herramientas poderosas para analizar texto. También comparten algunas similitudes sintácticas y lógicas. Y aunque todos son útiles para analizar texto, cada uno tiene sus especialidades. Este artículo examina el sed comando, que es un editor de secuencias .

He escrito antes sobre sed, así como sobre su pariente lejano ed. Para familiarizarse con sed, es útil familiarizarse con ed porque eso lo ayuda a acostumbrarse a la idea de los búferes. Este artículo asume que está familiarizado con los conceptos básicos de sed, lo que significa que al menos ha ejecutado el clásico s/foo/bar/ comando de búsqueda y reemplazo de estilo.

[Descargue nuestra hoja de trucos de sed gratis]

Instalando sed

Más recursos de Linux

  • Hoja de trucos de los comandos de Linux
  • Hoja de trucos de comandos avanzados de Linux
  • Curso en línea gratuito:Descripción general técnica de RHEL
  • Hoja de trucos de red de Linux
  • Hoja de trucos de SELinux
  • Hoja de trucos de los comandos comunes de Linux
  • ¿Qué son los contenedores de Linux?
  • Nuestros últimos artículos sobre Linux

Si está utilizando Linux, BSD o macOS, ya tiene instalado GNU o BSD sed. Estas son reimplementaciones únicas del sed original comando, y aunque son similares, hay pequeñas diferencias. Este artículo ha sido probado en las versiones de Linux y NetBSD, por lo que puede usar cualquier sed que encuentre en su computadora en este caso, aunque para BSD sed debe usar opciones cortas (-n en lugar de --quiet , por ejemplo) solamente.

Generalmente, se considera que GNU sed es el sed más rico en funciones disponible, por lo que es posible que desee probarlo, ya sea que esté ejecutando Linux o no. Si no puede encontrar GNU sed (a menudo llamado gsed en sistemas que no son Linux) en su árbol de puertos, entonces puede descargar su código fuente desde el sitio web de GNU. Lo bueno de instalar GNU sed es que puede usar sus funciones adicionales pero también restringirlo para que se ajuste a las especificaciones POSIX de sed, en caso de que necesite portabilidad.

Los usuarios de MacOS pueden encontrar GNU sed en MacPorts o Homebrew.

En Windows, puede instalar GNU sed con Chocolatey.

Comprender el espacio de patrón y el espacio de espera

Sed funciona exactamente en una línea a la vez. Debido a que no tiene una pantalla visual, crea un espacio de patrón , un espacio en la memoria que contiene la línea actual del flujo de entrada (con cualquier carácter final de nueva línea eliminado). Una vez que llena el espacio del patrón, sed ejecuta sus instrucciones. Cuando llega al final de los comandos, sed imprime el contenido del espacio del patrón en el flujo de salida. El flujo de salida predeterminado es stdout , pero la salida se puede redirigir a un archivo o incluso volver al mismo archivo usando --in-place=.bak opción.

Luego, el ciclo comienza de nuevo con la siguiente línea de entrada.

Para proporcionar un poco de flexibilidad mientras revisa los archivos con sed, sed también proporciona un espacio de espera (a veces también llamado búfer de retención ), un espacio en la memoria de sed reservado para el almacenamiento temporal de datos. Puede pensar en el espacio de espera como un portapapeles y, de hecho, eso es exactamente lo que demuestra este artículo:cómo copiar/cortar y pegar con sed.

Primero, cree un archivo de texto de muestra con este texto como su contenido:

Line one
Line three
Line two

Copiar datos en espacio de retención

Para colocar algo en el espacio de espera de sed, use h o H dominio. Una h minúscula le dice a sed que sobrescriba el contenido actual del espacio de retención, mientras que una H mayúscula le dice que agregue datos a lo que ya esté en el espacio de espera.

Usado solo, no hay mucho que ver:

$ sed --quiet -e '/three/ h' example.txt
$

El --quiet (-n para abreviar) la opción suprime todos los resultados, pero lo que sed ha realizado para mis requisitos de búsqueda. En este caso, sed selecciona cualquier línea que contenga la cadena three y copiándolo para contener espacio. No le he dicho a sed que imprima nada, por lo que no se produce ningún resultado.

Copiar datos del espacio de espera

Para obtener una idea del espacio de espera, puede copiar su contenido desde el espacio de espera y colocarlo en el espacio de patrón con la g dominio. Mira lo que sucede:

$ sed -n -e '/three/h' -e 'g;p' example.txt

Line three
Line three

La primera línea en blanco se imprime porque el espacio de espera está vacío cuando se copia por primera vez en el espacio del patrón.

Las siguientes dos líneas contienen Line three porque eso es lo que hay en el espacio de espera desde la línea dos en adelante.

Este comando usa dos scripts únicos (-e ) simplemente para ayudar con la legibilidad y la organización. Puede ser útil dividir los pasos en secuencias de comandos individuales, pero técnicamente este comando funciona tan bien como una declaración de secuencia de comandos:

$ sed -n -e '/three/h ; g ; p' example.txt

Line three
Line three

Adjuntar datos al espacio de patrones

El G El comando agrega un carácter de nueva línea y el contenido del espacio de retención al espacio del patrón.

$ sed -n -e '/three/h' -e 'G;p' example.txt
Line one

Line three
Line three
Line two
Line three

Las primeras dos líneas de esta salida contienen tanto el contenido del espacio del patrón (Line one ) y el espacio de espera vacío. Las siguientes dos líneas coinciden con el texto de búsqueda (three ), por lo que contiene tanto el espacio patrón como el espacio de espera. El espacio de retención no cambia para el tercer par de líneas, por lo que el espacio del patrón (Line two ) se imprime con el espacio de retención (todavía Line three ) final al final.

Hacer cortar y pegar con sed

Ahora que sabe cómo hacer malabarismos con una cadena de patrón para mantener el espacio y viceversa, puede diseñar un script sed que copie, luego elimine y luego pegue una línea dentro de un documento. Por ejemplo, el archivo de ejemplo de este artículo tiene Line three fuera de servicio. Sed puede arreglar eso:

$ sed -n -e '/three/ h' -e '/three/ d' \
-e '/two/ G;p' example.txt
Line one
Line two
Line three
  • El primer script encuentra una línea que contiene la cadena three y lo copia del espacio de patrones al espacio de espera, reemplazando cualquier cosa que esté actualmente en el espacio de espera.
  • El segundo script elimina cualquier línea que contenga la cadena three . Esto completa el equivalente a un corte acción en un procesador de texto o editor de texto.
  • El script final encuentra una línea que contiene two y añade el contenido del espacio de retención en el espacio patrón y luego imprime el espacio patrón.

Trabajo hecho.

Secuencias de comandos con sed

Una vez más, el uso de declaraciones de script separadas es puramente por simplicidad visual y mental. El comando de cortar y pegar funciona como un script:

$ sed -n -e '/three/ h ; /three/ d ; /two/ G ; p' example.txt
Line one
Line two
Line three

Incluso se puede escribir como un archivo de script dedicado:

#!/usr/bin/sed -nf

/three/h
/three/d
/two/ G
p

Para ejecutar el script, márquelo como ejecutable y pruébelo en su archivo de muestra:

$ chmod +x myscript.sed
$ ./myscript.sed example.txt
Line one
Line two
Line three

Por supuesto, cuanto más predecible sea el texto que necesita analizar, más fácil será resolver su problema con sed. Por lo general, no es práctico inventar "recetas" para acciones sed (como copiar y pegar) porque la condición para activar la acción probablemente sea diferente de un archivo a otro. Sin embargo, cuanto más fluya con los comandos de sed, más fácil será idear acciones complejas basadas en la entrada que necesita analizar.

Lo importante es reconocer acciones distintas, comprender cuándo sed pasa a la siguiente línea y predecir qué se espera que contenga el patrón y el espacio de espera.

Descargar la hoja de trucos

Sed es complejo. Solo tiene una docena de comandos, pero su sintaxis flexible y potencia bruta significan que está lleno de un potencial infinito. Solía ​​hacer referencia a páginas de ingeniosas frases ingeniosas en un intento de aprovechar al máximo sed, pero no fue hasta que comencé a inventar (y, a veces, reinventar) mis propias soluciones que sentí que estaba empezando a en realidad aprender sed. Si está buscando recordatorios suaves de comandos y consejos útiles sobre sintaxis, descargue nuestra hoja de trucos de sed y comience a aprender sed de una vez por todas.


Linux
  1. Cómo usar el comando grep de Linux

  2. Cómo usar el comando de historial en Linux

  3. Cómo usar el comando Su en Linux

  4. Cómo usar el comando id en Linux

  5. Cómo usar el comando "pantalla" en Linux

Cómo usar el comando ping de Linux

Cómo usar el comando fd en el sistema Linux

¿Cómo usar el comando wget en Linux?

¿Cómo usar el comando xargs en Linux?

Cómo usar el comando RPM en Linux

Cómo usar el comando which en Linux