Mostrando entradas con la etiqueta código. Mostrar todas las entradas
Mostrando entradas con la etiqueta código. Mostrar todas las entradas

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

lunes, 24 de junio de 2024

Expresiones Regulares - Regex

Construir Expresiones Regulares

Construir Expresiones Regulares

Pasos para construir una expresión regular

  1. Define tu objetivo: ¿Qué quieres buscar o validar? Por ejemplo, puede ser un número de teléfono, una dirección de correo electrónico, una fecha, etc.
  2. Desglosa el patrón: Divide el objetivo en partes más pequeñas y analiza cada parte por separado.
  3. Elige los metacaracteres adecuados: Usa los metacaracteres y constructos de expresiones regulares para definir cada parte del patrón.
  4. Construye la expresión regular: Une todas las partes usando los metacaracteres adecuados.
  5. Prueba tu expresión regular: Utiliza herramientas en línea o scripts para probar tu expresión regular con diferentes entradas.

Metacaracteres en Expresiones Regulares

Metacaracteres Básicos

  • .: Coincide con cualquier carácter excepto una nueva línea.
  • ^: Coincide con el inicio de una línea.
  • $: Coincide con el final de una línea.
  • \: Escapa un metacaracter para que se trate como un carácter literal (por ejemplo, \. coincide con un punto literal).
  • []: Define un conjunto de caracteres. Coincide con cualquiera de los caracteres incluidos (por ejemplo, [a-z] coincide con cualquier letra minúscula).

Clases de Caracteres

  • \d: Coincide con cualquier dígito (equivalente a [0-9]).
  • \D: Coincide con cualquier carácter que no sea un dígito.
  • \w: Coincide con cualquier carácter de palabra (letras, dígitos y guion bajo) (equivalente a [a-zA-Z0-9_]).
  • \W: Coincide con cualquier carácter que no sea de palabra.
  • \s: Coincide con cualquier carácter de espacio en blanco (espacios, tabulaciones, saltos de línea).
  • \S: Coincide con cualquier carácter que no sea un espacio en blanco.

Cuantificadores

  • *: Coincide con cero o más repeticiones del carácter o grupo anterior.
  • +: Coincide con una o más repeticiones del carácter o grupo anterior.
  • ?: Coincide con cero o una repetición del carácter o grupo anterior.
  • {n}: Coincide con exactamente n repeticiones del carácter o grupo anterior.
  • {n,}: Coincide con n o más repeticiones del carácter o grupo anterior.
  • {n,m}: Coincide con entre n y m repeticiones del carácter o grupo anterior.

Anclas y Límite de Palabra

  • \b: Coincide con un límite de palabra (la posición entre un carácter de palabra y un carácter que no es de palabra).
  • \B: Coincide con una posición que no es un límite de palabra.

Grupos y Alternancia

  • (): Agrupa caracteres o subexpresiones. Los grupos capturados pueden ser referenciados posteriormente.
  • |: Actúa como un OR lógico entre patrones (por ejemplo, a|b coincide con a o b).

Ejemplo de Expresión Regular

Vamos a construir una expresión regular de ejemplo que use varios de estos metacaracteres para validar una dirección de correo electrónico simple:

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

Desglose

  • ^: Inicio de la línea.
  • [a-zA-Z0-9._%+-]+: Coincide con uno o más caracteres que pueden ser letras, dígitos, puntos, guiones, subguiones, signos de más o de porcentaje.
  • @: Coincide con el símbolo arroba.
  • [a-zA-Z0-9.-]+: Coincide con uno o más caracteres que pueden ser letras, dígitos, puntos o guiones.
  • \.: Coincide con un punto literal.
  • [a-zA-Z]{2,}: Coincide con dos o más letras.
  • $: Final de la línea.

Ejemplo 1: Construcción de una expresión regular para una dirección de correo electrónico

  1. Define el objetivo: Queremos validar una dirección de correo electrónico.
  2. Desglosa el patrón:
    • Parte local (antes del @): puede incluir letras, números, puntos, guiones y guiones bajos.
    • Símbolo @.
    • Dominio: puede incluir letras, números y guiones, seguido por un punto y un dominio superior (como .com, .org).
  3. Elige los metacaracteres:
    • \w para caracteres de palabra.
    • . para cualquier carácter.
    • @ como carácter literal.
    • [a-zA-Z0-9-] para el dominio.
    • \. para el punto en el dominio.
  4. Construye la expresión regular:
    ^[\w.-]+@[a-zA-Z0-9-]+\.[a-zA-Z]{2,6}$

    Desglose:

    • ^[\w.-]+: Parte local (caracteres de palabra, puntos y guiones).
    • @: Símbolo @.
    • [a-zA-Z0-9-]+: Dominio (letras, números y guiones).
    • \.: Punto en el dominio.
    • [a-zA-Z]{2,6}$: Dominio superior (2 a 6 letras).

Ejemplo 2: Construcción de una expresión regular para una fecha con puntos

La siguiente expresión regular valida fechas en los formatos 'DD.MM.AA' o 'DD.MM.AAAA':

\b\d{1,2}\.\d{1,2}\.(\d{2}|\d{4})\b

Esta expresión regular validará fechas en los formatos:
10.10.22, 10.10.2022, 1.10.22, 1.10.2222, 10.1.22 o 10.1.2222

  1. Define el objetivo: Queremos validar una fecha separada por puntos.
  2. Desglosa el patrón:
    • Día: Pueden ser uno (si se omite el cero a la izquierda) o dos digitos.
    • Mes: Pueden ser uno (si se omite el cero a la izquierda) o dos digitos.
    • Año: Pueden ser dos o cuatro digitos si es el año completo.
  3. Elige los metacaracteres:
    • \b Indica un limite de palabra
    • \d Para cualquier digito.
    • \. Para el punto como carácter.
  4. Construye la expresión regular:
    \b\d{1,2}\.\d{1,2}\.(\d{2}|\d{4})\b

    Desglose:

    • \b: Indica un límite de palabra.
    • \d{1,2}: Coincide con uno o dos dígitos (día y mes).
    • \.: Coincide con un punto literal.
    • (\d{2}|\d{4}): Coincide con dos o cuatro dígitos (año).
    • \b: Indica un límite de palabra.

Desglose de la expresión regular

  • \b: Indica un límite de palabra para asegurarse de que la fecha no es parte de una cadena más larga.
  • \d{2}: Coincide con exactamente dos dígitos para el día.
  • \.: Coincide con el carácter punto literal.
  • \d{2}: Coincide con exactamente dos dígitos para el mes.
  • \.: Coincide con el carácter punto literal.
  • \d{2}: Coincide con exactamente dos dígitos para el año en formato corto (AA).
  • (\d{2})?: Coincide opcionalmente con otros dos dígitos para el año en formato largo (AAAA).
  • \b: Indica un límite de palabra para asegurarse de que la fecha no es parte de una cadena más larga.

Ejemplo 3: Construcción de una expresión regular para una fecha limitada a dias del mes

La siguiente expresión regular valida fechas en los formatos:

  • 'DD-MM-AAAA'
  • 'DD MM AAAA'
  • 'DD_MM_AAAA'
  • DD-mes-AAAA'

^(?:[\w-]+[[:space:]]+)*(?:(?:0?[1-9]|[12][0-9]|3[01])(?:[\s_-])(?:0?[1-9]|1[0-2])(?:[\s_-])(?:\d{4}))((?:[\s_-]+[\w-]+)*)

Esta expresión regular busca una cadena que comienza con cero o mas palablas separadas por espacios, guiones o guiones bajos. Luego busca una fecha en los formatos especificados (DD-MM-AAAA, DD MM AAAA, DD_MM_AAAA o DD-mes-AAAA). Posteriormente captura cualquier cadena que siga a la fecha, pudiendo estar separada de la fecha por uno o mas espacio, guiones o guiones bajos.
10-10-2024 Nueva España.pdf, 10 10 2024 Nueva España.pdf, 10_10_2024 Nueva España.pdf, 10-10-2024 Nueva España-10-10-2024.pdf, Nueva_España_10_octubre_2024_Madrid.pdf o 2024-10-10_Madrid_Nueva_españa

  1. Construye la expresión regular:
    (?:(?:0?[1-9]|[12][0-9]|3[01])(?:[\s_-])(?:0?[1-9]|1[0-2])(?:[\s_-])(?:\d{4}))

    Desglose:

    • (?:(?:0?[1-9]|[12][0-9]|3[01]): busca un número de día que puede ser de uno o dos digitos y comprendido entre 1 y 31.
    • (?:[\s_-]): Busca un separador de fecha que puede ser un espacio en blanco, un guión o un guión bajo.
    • (?:0?[1-9]|1[0-2]): Busca un numero de mes que puede ser de uno o dos digitos y comprendido entre 1 y 12.
    • (?:[\s_-]): Busca otro separador de fecha.
    • (?:\d{4}): Busca un numero de año de cuatro dígitos.

Prueba tu expresión regular

Puedes usar herramientas en línea como regex101 para probar y depurar tus expresiones regulares.