75.08 Sistemas Operativos Lic. Ing. Osvaldo Cla Lic. Adrin Muccio
Expresiones Regulares
Se utilizan como solucin al problema de realizar bsquedas de 2 caracteres en una cadena de 10 o un patrn definido en un archivo de millones de caracteres Las Expresiones Regulares (ER) constituyen un potente mecanismo para realizar manipulaciones y/o bsquedas de cadenas de texto
Expresiones Regulares
Expresiones Regulares
Se define un espacio de bsqueda o patrn dentro del texto interpretando los caracteres en forma literal o especial. A los caracteres especiales se los llaman metacaracteres porque forman parte del mismo alfabeto del lenguaje pero se interpretan como descriptores de los caracteres literales
Expresiones Regulares
Expresiones Regulares
Ejemplos de espacio de bsqueda o patrn
Expresiones Regulares
Expresiones Regulares
La ER para definir el patrn sera:
Expresiones Regulares
Una expresin regular es una forma de representar a los lenguajes regulares (finitos o infinitos) y se construye utilizando caracteres del alfabeto sobre el cual se define el lenguaje Es un conjunto de caracteres que especifican un patrn Toma su nombre de la notacin utilizada por el matemtico Stephen Cole Kleene en la dcada del 50
An antes de la creacin de Unix, Ken Thompson implement las RE para la bsqueda de patrones en un editor de lnea de un sistema time-sharing
Expresiones Regulares
Expresiones Regulares
Las Expresiones Regulares son interpretadas por un Motor Existen motores para el usuario final, por ejempo:
grep: global regular expresion, comando de Unix sed: stream editor, comando de Unix awk, ed, egrep, etc: comandos de Unix Editores varios: vi, vim, etc
Expresiones Regulares 7
Expresiones Regulares
Expresiones Regulares
IMPORTANTE
Las ERs no forman parte del SHELL Si deseamos utilizar comandos que reciben ERs como parmetro, debemos protejernos de las distintas expansiones que realiza el SHELL
Expresiones Regulares
Expresiones Regulares
Metacaracteres de ER Simples
Expresiones Regulares
10
Expresiones Regulares
de Repeticin
: Expansin del caracter anterior en n ocurrencias subsiguientes del mismo. Incluye ocurrencia nula.
Expresiones Regulares
11
Expresiones Regulares
De Conjuntos
[ ]: inicio y fin de conjunto - : rango dentro del conjunto ^ : negacin del conjunto
Expresiones Regulares
12
Expresiones Regulares
grep opciones RE lista_de_archivos
El comportamiento por defecto es mostrar por std out todo el contenido de las lneas en las que se encuentre al menos una ocurrencia de la RE pasado por parmetro Es un tpico comando filtro Ejemplo de opciones que modifican el comportamiento por defecto -l: solo muestra por std out el nombre de los archivos que en el que alguna de sus lneas contenga al menos una ocurrencia de la RE
Expresiones Regulares
13
Expresiones Regulares
grep opciones RE lista_de_archivos -i: ignora diferencias entre maysculas y minsculas -v: invierte el comportamiento por defecto -n: nro de lnea + : + lnea -c: cuenta cuantas lneas contiene la RE
Expresiones Regulares
14
Expresiones Regulares
Ejemplos grep
# muestra las lneas que comiencen con las palabras Hola u hola > grep '^[Hh]ola' DATA # muestra las lneas no vacas > grep -v '^$' DATA # muestra las lneas no vacas > grep '.' DATA
Expresiones Regulares
15
Expresiones Regulares
# muestra las lneas con un dgito < a 5 en su 3 caracter > grep '^..[0-4]' DATA # muestra las lneas que no contengan un dgito entre 5 y 9 en su 3 caracter > grep '^..[^5-9]' DATA # muestra las lneas que comienzan con una a y finalizan con por lo menos una b seguida de por lo menos una c seguida de una Z. > grep '^a.*bcc*Z$' DATA
Ejemplo de salida: aFAaJHadsbcZ a567cbccZ89jhgfdacasdfbcccccccZ
FIUBA 75.08 Sistemas Operativ os Expresiones Regulares 16
Expresiones Regulares
Ejercicio
Se tiene un archivo DATANET.conf con los cdigos de transaccin bancaria Se desea saber si existe una inconsistencia entre los campos CREATE_TRX y PAYMENT_TYPE la inconsistencia seria que existiera un valor Y en CREATE_TRX y el valor CHEQUE en campo PAYMENT_TYPE Los campos estn separados por ;
Expresiones Regulares
17
Expresiones Regulares
El formato de registro es
Expresiones Regulares
sed: Stream Editor (editor en lnea)
sed es un verdadero editor de lneas, lo que hace es ejecutar comandos sobre cada lnea de la entrada std o del archivo pasado como parmetro sed opciones comando <parametros del comando> [archivo]
Expresiones Regulares
19
Expresiones Regulares
Algunas de los comandos son: -a: agregar -i : insertar -d: borrar -s: sustitur
Expresiones Regulares
20
Expresiones Regulares
Sustitucin
El comportamiento por defecto es recorrer todas las lneas y mostrarlas por la std out a menos que se encuentre una ocurrencia del patrn de bsqueda, en cuyo caso se muestra la lnea cambiando el patrn por lo que se indique como patrn de sustitucin. Solo se sustituye la primera ocurrencia del patrn de bsqueda
Expresiones Regulares 21
Expresiones Regulares
sed s/busqueda/sustitucion/ lista_archivos
El caracter que sigue al comando s queda a criterio del usuario, debe ser el mismo que separe el patrn de bsqueda del de la sustitucin.
Expresiones Regulares
22
Expresiones Regulares
Tengo sed. Tengo mucha, pero mucha sed. cat archivo | sed 's/m.*a//'
El patrn se expande desde la primera m hasta la ltima a mucha, pero mucha
Expresiones Regulares
23
Expresiones Regulares
Se puede modificar el comportamiento por defecto
Para sustituir todas las ocurrencias del patrn: sed s/find/replace/g Para sustituir en algunas lneas hay 2 opciones
Direccionamiento explcito por nmero de lnea: sed 80s/a/B/ Direccionamiento por patrn: sed /^Hola/soAoBo
Expresiones Regulares
24
Expresiones Regulares
Sustitucin con referencia Ejemplo: Se tiene un archivo de texto en el que aparecen fechas con el siguiente formato mm/dd/aaaa se desea cambiarle el formato a dd/mm/aaaa
1 2 3 -----mes---- -----da----- -----ao---sed s-\([0-1] [0-9]\)/\([0-3][0-9]\)/\([0-9] \{4\}\)-\2/\1/\3-g
Expresiones Regulares
25
Expresiones Regulares
Ejercicio
Se tiene un archivo con nmeros enteros de 3 dgitos, se desea generar otro archivo con los capicas de cada uno de los nmeros Ejemplo: 123 231 932 12321 23132 93239
Expresiones Regulares
26
Expresiones Regulares
Comando insert
El comportamiento por defecto es imprimir por salida std nuevas lneas antes de una lnea que contenga al menos una ocurrencia del patrn de bsqueda. sed '/patron/i\ Nueva_linea_1 Nueva_linea_N' lista_de_archivos
Expresiones Regulares
27
Expresiones Regulares
Archivo F.sql
CREATE OR REPLACE FUNCTION my_true RETURN NUMBER IS BEGIN RETURN TRUE; END my_true ;
Expresiones Regulares
28
Expresiones Regulares
> sed '/my_true/i\ Nueva_linea' F.sql
Nueva_linea CREATE OR REPLACE FUNCTION my_true RETURN NUMBER IS BEGIN RETURN TRUE; Nueva_linea END my_true ;
FIUBA 75.08 Sistemas Operativ os Expresiones Regulares 29
Expresiones Regulares
Comando append
El comportamiento por defecto es imprimir por salida std nuevas lneas despus de una lnea que contenga al menos una ocurrencia del patrn de bsqueda. sed '/patron/a\ Nueva_linea_1 Nueva_linea_N' lista_de_archivos
Expresiones Regulares
30
Expresiones Regulares
> sed '/my_true/a\ Nueva_linea' F.sql
CREATE OR REPLACE FUNCTION my_true RETURN NUMBER Nueva_linea IS BEGIN RETURN TRUE; END my_true ; Nueva_linea
FIUBA 75.08 Sistemas Operativ os Expresiones Regulares 31
Expresiones Regulares
Ejercicio PPV - Solo se permite el uso de grep, sed, wc, bc, let y echo
Una empresa operadora de televisin para su servicio de canales con cargo adicional, conocido como Pay Per View, desea que sus clientes puedan adquirir este servicio por medio de un mensaje SMS. Nos pide desarrollar un script que sea invocado por una operadora telefnica y nuestro script registre la venta invocando a su vez a un API de su sistema CRM. El script debe recibir como parmetros de entrada: -Nmero de telfono origen -Cdigo del cliente -Canal El Nmero de telfono origen se enva con el siguiente formato fijo (nn)(nnnnnn)nnnn. Donde n: significa dgito Los caracteres 6 a 11 contienen el cdigo de rea Los caracteres 13 a 16 contienen el nmero
FIUBA 75.08 Sistemas Operativ os Expresiones Regulares 32
Expresiones Regulares
El API a invocar es un programa que se llama RegistrarVentaPPV y recibe como parmetros el cdigo de cliente y la seal PPV. Por restricciones tcnicas, en un mismo canal, no todos los clientes ven las mismas seales. La seal se determina en base al cdigo de rea del telfono y el canal recibidos Las relaciones se encuentran en el archivo Signals&Chanels.dat, que posee el siguiente formato:
Campo
ID_RELACION SEAL CODIGO_AREA CANAL COMENTARIOS
Descripcin
Identificacin de Relacin (*) Seal (*) Nombre largo de la seal (*) Cdigo del canal (*) Comentarios varios (*)
Todos los campos se encuentran separados por el caracter ; El (*) indica que se desconocen tipo y formato del campo. Existe a lo sumo un canal por cada dupla de SEAL y CODIGO_AREA Numrico de 6 posiciones Se rellena con 0s a la izquierda.
Expresiones Regulares
33
Expresiones Regulares
Ejercicio Control Sucursales sed, wc, bc, let y echo Para la integracin con el sistema de control de sucursales, la empresa nos pide desarrollar un script que reciba una novedad del inventario centralizado y la impacte en el stock de las sucursales. El script se llamar RegistrarNovedadStock.sh, debe recibir como parmetro el centro logstico, la identificacin del producto, el tipo de operacin y la cantidad, debe deducir la sucursal relacionada y traducir el tipo de operacin al cdigo de novedad para finalmente invocar a un API del sistema de sucursales llamada UpdateStock. El cdigo de retorno del script debe ser el mismo cdigo que devuelve el API. En caso de no poder obtener la sucursal o el cdigo de novedad, se debe invocar al API con el valor X en el parmetro que no se pudo obtener. Ejemplo de invocacin del script: RegistrarNovedadStock.sh <cantidad>
FIUBA 75.08 Sistemas Operativ os
<centro_logistico>
Expresiones Regulares
<id_producto>
<tipo_operacin>
34
Expresiones Regulares
Ejemplo de invocacin del API: UpdateStock <sucursal> <cdigo_novedad> <id_producto> <cantidad> Para obtener la sucursal y el cdigo de novedad MapeoSucursal.dat, que posee el siguiente formato: se cuenta con el archivo
Campo
ID_MAPEO CLASE_MAPEO VALOR_ORIGEN VALOR_DESTINO COMENTARIO ESTADO
Descripcin
Identificador de instancia de Mapeo (*) Clase de mapeo, para sucursal SUCURSAL, para novedad NOVEDAD Valor en sistema origen (*) Valor en sistema destino (*) Comentarios varios (*) Estado de la instancia, se debe verificar que la instancia a mapear se encuentre en estado ACTIVA Expresiones Regulares
Todos los campos se encuentran separados por el caracter ; El (*) indica que se desconocen tipo y formato del campo.
Como mximo hay una sola instancia ACTIVA para la dupla CLASE_MAPEO y VALOR_ORIGEN 35