Expresiones Regulares en sed
El comando sed o editor de secuencias se usa para sustitucion de texto.
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
[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