Sed, el editor de secuencias, y un poco de expresiones regulares. Sys Admin y DevOps.

El comando SED en UNIX significa editor de flujo y puede realizar muchas funciones en el archivo, como buscar, encontrar y reemplazar, insertar o eliminar. Aunque el uso más común del comando SED en UNIX es para sustitución o para buscar y reemplazar. Al usar SED, puede editar archivos incluso sin abrirlos, que es una forma mucho más rápida de encontrar y reemplazar algo en el archivo, que primero abrir ese archivo en VI Editor y luego cambiarlo.

  • SED es un potente editor de secuencias de texto. Puede hacer inserción, eliminación, búsqueda y reemplazo (sustitución).
  • El comando SED en Unix admite la expresión regular, lo que le permite realizar coincidencias de patrones complejos.

Sintaxis

OPCIONES sed... [GUIÓN] [ARCHIVO DE ENTRADA...] 

Ejemplo:
considere el siguiente archivo de texto como una entrada.

$cat > file.txt
Unix es un gran sistema operativo. Unix es de código abierto. Unix es un sistema operativo libre.
aprender sistema operativo.
unix linux cuál eliges.
unix es fácil de aprender.unix es un sistema operativo multiusuario.Aprender unix .unix es un poderoso.

Reemplazar o sustituir una cadena: el comando Sed se usa principalmente para reemplazar el texto en un archivo. El siguiente comando sed simple reemplaza la palabra «unix» con «linux» en el archivo.

$sed 's/unix/linux/' file.txt
linux es un gran sistema operativo. Unix es de código abierto. Unix es un sistema operativo libre.
aprender sistema operativo.
linux linux cuál eliges.
linux es fácil de aprender.unix es un sistema operativo multiusuario.Aprender unix .unix es poderoso.
Aquí la “s” especifica la operación de sustitución. Los “/” son delimitadores. El "unix" es el patrón de búsqueda y el "linux" es la cadena de reemplazo.

De forma predeterminada, el comando sed reemplaza la primera ocurrencia del patrón en cada línea y no reemplazará la segunda, tercera... ocurrencia en la línea.

Reemplazo de la enésima ocurrencia de un patrón en una línea: Use las banderas /1, /2, etc. para reemplazar la primera, segunda ocurrencia de un patrón en una línea. El siguiente comando reemplaza la segunda aparición de la palabra «unix» con «linux» en una línea.

$sed 's/unix/linux/2' file.txt
Unix es un gran sistema operativo. Linux es de código abierto. Unix es un sistema operativo libre.
aprender sistema operativo.
unix linux cuál eliges.
Unix es fácil de aprender. Linux es un sistema operativo multiusuario. Aprenda Unix. Unix es un poderoso.

Reemplazo de todas las ocurrencias del patrón en una línea: el indicador de sustitución /g (reemplazo global) especifica el comando sed para reemplazar todas las ocurrencias de la cadena en la línea.

$sed 's/unix/linux/g' file.txt
linux es un gran sistema operativo. Linux es de código abierto. linux es un sistema operativo libre.
aprender sistema operativo.
linux linux cuál eliges.
linux es fácil de aprender. linux es un sistema operativo multiusuario. Aprenda linux. linux es un poderoso.

Reemplazar desde la enésima aparición a todas las apariciones en una línea: use la combinación de /1, /2, etc. y /g para reemplazar todos los patrones desde la enésima aparición de un patrón en una línea. El siguiente comando sed reemplaza la tercera, cuarta, quinta… palabra «unix» con la palabra «linux» en una línea.

$sed 's/unix/linux/3g' file.txt
Unix es un gran sistema operativo. Unix es de código abierto. linux es un sistema operativo libre.
aprender sistema operativo.
unix linux cuál eliges.
unix es fácil de aprender.unix es un sistema operativo multiusuario.Aprender linux .linux es un poderoso.

Como vemos, el comando Sed es muy útil para realizar operaciones de búsqueda y reemplazo de patrones de texto.

Expresiones Regulares (RE)

Veamos ahora un ejemplo de cómo utilizar Espresiones Regulares con el comando Sed.

Colocar entre paréntesis el primer carácter de cada palabra: este ejemplo de sed imprime el primer carácter de cada palabra entre paréntesis.

$ echo "Bienvenido al mundo de Linux" | sed 's/\b\([a-zA-Z]\)/(\1)/g'

La expresión regular ‘s/\b([a-zA-Z])/(\1)/g’ se puede interpretar de la siguiente manera:

  • La letra ‘s’ al principio indica que se trata de una operación de reemplazo (substitución).
  • El primer conjunto de caracteres dentro de las barras inclinadas (‘/’) representa el patrón de búsqueda a ser reemplazado. En este caso, el patrón de búsqueda es ‘\b\([a-zA-Z]\)’, que busca un carácter de palabra que sea una letra mayúscula o mayúscula al inicio de una palabra.
  • El segundo conjunto de caracteres dentro de las barras inclinadas (‘/’) representa el texto de reemplazo. En este caso, el texto de reemplazo es ‘(\1)’, que reemplaza el patrón de búsqueda con la misma letra mayúscula que se encontró, pero esta vez entre paréntesis.
  • La letra ‘g’ al final indica que se debe realizar la operación de reemplazo en todas las instancias encontradas en el texto, no sólo en la primera.

Entonces, esta expresión regular busca todas las letras mayúsculas que comienzan una palabra y las reemplaza por la misma letra entre paréntesis.

Con el comando Sed puedes realizar un gran número de modificaciones y sustituciones de texto, incluso también se puede usar para eliminar líneas de un archivo en particular. 

Para que conozcas más sobre la sintaxis de este comando y su uso con expresiones regulares tanto básicas (BRE) como extendidas (ERE) te recomendamos que visites la documentación de GNU al respecto.

Share