miércoles, 10 de julio de 2024

Expresiones Regulares en SED

Expresiones Regulares en sed

El comando sed o editor de secuencias se usa para sustitucion de texto.

texto bash shell

Ejemplos de `sed` y Expresiones Regulares

1. Reemplazo simple con referencia

Ejemplo 1:

echo "hello 123" | sed 's/\([0-9]\+\)/[\1]/'
# Salida: hello [123]

Reemplaza cualquier secuencia de dígitos con los mismos dígitos entre corchetes.

Ejemplo 2:

echo "foo bar baz" | sed 's/\(bar\)/[\1]/'
# Salida: foo [bar] baz

Reemplaza la palabra "bar" con "[bar]".

2. Uso de clases de caracteres

Ejemplo 1:

echo "hello" | sed 's/[aeiou]/X/g'
# Salida: hXllX

Reemplaza todas las vocales con "X".

Ejemplo 2:

echo "sed script" | sed 's/[sS]/Z/g'
# Salida: Zed Zcript

Reemplaza todas las ocurrencias de "s" o "S" con "Z".

3. Alternancia

Ejemplo 1:

echo "cat bat rat" | sed 's/cat\|bat/dog/g'
# Salida: dog dog rat

Reemplaza "cat" o "bat" con "dog".

Ejemplo 2:

echo "one two three" | sed 's/one\|three/four/g'
# Salida: four two four

Reemplaza "one" o "three" con "four".

4. Anclas de línea

Ejemplo 1:

echo -e "foo\nbar" | sed 's/^foo/baz/'
# Salida: baz
#         bar

Reemplaza "foo" solo al inicio de la línea con "baz".

Ejemplo 2:

echo -e "foo\nbar" | sed 's/bar$/baz/'
# Salida: foo
#         baz

Reemplaza "bar" solo al final de la línea con "baz".

5. Reemplazo con repetición

Ejemplo 1:

echo "aaaabbbb" | sed 's/a\+/A/'
# Salida: Abbbb

Reemplaza una o más "a" consecutivas con "A".

Ejemplo 2:

echo "123456" | sed 's/[0-9]\+/NUM/'
# Salida: NUM

Reemplaza una secuencia de uno o más dígitos con "NUM".

6. Agrupación y referencia posterior

Ejemplo 1:

echo "abc abc" | sed 's/\(abc\) \1/\1 XYZ/'
# Salida: abc XYZ

Reemplaza "abc abc" con "abc XYZ" usando referencia posterior.

Ejemplo 2:

echo "123-456" | sed 's/\([0-9]\{3\}\)-\([0-9]\{3\}\)/\1.\2/'
# Salida: 123.456

Reemplaza el guión en "123-456" por un punto.


Comando Mejorado para Diferentes Cantidades de Dígitos

echo "1.2.24" | sed 's/\([0-9]\{1,2\}\)\.?\([0-9]\{1,2\}\)\.?\([0-9]\{2,4\}\)/\1-\2-\3/'

Desglose de la expresión regular:

  • \([0-9]\{1,2\}\) captura uno o dos dígitos.
  • \.? coincide opcionalmente con un punto.
  • \([0-9]\{1,2\}\) captura uno o dos dígitos.
  • \.? coincide opcionalmente con un segundo punto.
  • \([0-9]\{2,4\}\) captura entre dos y cuatro dígitos.

La cadena de reemplazo \1-\2-\3 formatea la salida con guiones.

Ejemplos

Entrada completa

echo "12.34.5678" | sed 's/\([0-9]\{1,2\}\)\.?\([0-9]\{1,2\}\)\.?\([0-9]\{2,4\}\)/\1-\2-\3/'

Salida: 12-34-5678

Entrada con grupos incompletos

echo "1.2.24" | sed 's/\([0-9]\{1,2\}\)\.?\([0-9]\{1,2\}\)\.?\([0-9]\{2,4\}\)/\1-\2-\3/'

Salida: 1-2-24

Entrada con solo dos grupos

echo "5.678" | sed 's/\([0-9]\{1,2\}\)\.?\([0-9]\{1,2\}\)\.?\([0-9]\{2,4\}\)/\1-\2-\3/'

Salida: 5-67-8

Nota

Esta expresión regular puede no funcionar correctamente si no se proporcionan suficientes grupos para que coincidan con los patrones. Asegúrate de que los datos de entrada siempre contengan al menos dos grupos de uno o dos dígitos y un grupo de dos a cuatro dígitos.

[e1] https://vergaracarmona.es/comando-sed/

[e2] https://www.gnu.org/software/sed/manual/sed.html#sed-script-overview

[e3] https://techsolutionscenter.wordpress.com/2011/11/17/uso-basico-del-comando-sed-reemplazar-cadenas-en-archivos-con-sed/

[e4] https://www-gnu-org.translate.goog/software/sed/manual/sed.html?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc

[e5] https://www-grymoire-com.translate.goog/Unix/Sed.html?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc

[e6] https://edoras-sdsu-edu.translate.goog/doc/sed.html?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc