Anda di halaman 1dari 35

FacultaddeIngeniera UniversidaddeBuenos Aires

75.08 Sistemas Operativos Lic. Ing. Osvaldo Cla Lic. Adrin Muccio

Expresiones Expresiones Regulares Regulares

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

FIUBA 75.08 Sistemas Operativ os

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

FIUBA 75.08 Sistemas Operativ os

Expresiones Regulares

Expresiones Regulares
Ejemplos de espacio de bsqueda o patrn

Dada la siguiente lnea de texto:


-No puede ser pero es. El nmero de pginas de este libro es exactamente infinito. Ninguna es la primera; ninguna, la ltima.
Extracto del cuento El libro de arena ed 1975 J. L. Borges

Utilizando ER podramos definir el siguiente patrn


es. El nmero de pginas de este libro es exactamente infinito. Ninguna es

FIUBA 75.08 Sistemas Operativ os

Expresiones Regulares

Expresiones Regulares
La ER para definir el patrn sera:

' es.*es '


Los caracteres espacio, e y ese son interpretados en forma literal Los caracteres punto y asterisco actan como Metacaracteres

es. El nmero de pginas de este libro es exactamente infinito. Ninguna es


FIUBA 75.08 Sistemas Operativ os Expresiones Regulares 5

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

FIUBA 75.08 Sistemas Operativ os

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

FIUBA 75.08 Sistemas Operativ os

Expresiones Regulares

Motores para el programador, por ejempo:


Perl Python PHP Java/JavaScript .Net Framework Oracle


Expresiones Regulares 8

Motores para Base de Datos por ejempo:

FIUBA 75.08 Sistemas Operativ os

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

FIUBA 75.08 Sistemas Operativ os

Expresiones Regulares

Expresiones Regulares
Metacaracteres de ER Simples

. (punto): Cualquier caracter


de Anclaje

^ : Referencia al inicio de lnea $ : Referencia al fin de lnea

FIUBA 75.08 Sistemas Operativ os

Expresiones Regulares

10

Expresiones Regulares
de Repeticin

? : Que el caracter anterior tenga como mximo


una ocurrencia

: Expansin del caracter anterior en n ocurrencias subsiguientes del mismo. Incluye ocurrencia nula.

\{x,y\} : Que el caracter anterior se repita entre x e


y veces, siendo siendo opcional y

FIUBA 75.08 Sistemas Operativ os

Expresiones Regulares

11

Expresiones Regulares
De Conjuntos

[ ]: inicio y fin de conjunto - : rango dentro del conjunto ^ : negacin del conjunto

FIUBA 75.08 Sistemas Operativ os

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

FIUBA 75.08 Sistemas Operativ os

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

FIUBA 75.08 Sistemas Operativ os

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

FIUBA 75.08 Sistemas Operativ os

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 ;

FIUBA 75.08 Sistemas Operativ os

Expresiones Regulares

17

Expresiones Regulares
El formato de registro es

BANK_ACCOUNT TRX_COD DESCRIPTION CREATE_TRX RECEIPT_METHOD PAYMENT_TYPE CODE_TYPE

Solo se puede usar el comando grep


FIUBA 75.08 Sistemas Operativ os Expresiones Regulares 18

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]

FIUBA 75.08 Sistemas Operativ os

Expresiones Regulares

19

Expresiones Regulares
Algunas de los comandos son: -a: agregar -i : insertar -d: borrar -s: sustitur

FIUBA 75.08 Sistemas Operativ os

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

FIUBA 75.08 Sistemas Operativ os

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.

FIUBA 75.08 Sistemas Operativ os

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

Tengo sed. Tengo sed.

FIUBA 75.08 Sistemas Operativ os

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

FIUBA 75.08 Sistemas Operativ os

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

FIUBA 75.08 Sistemas Operativ os

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

FIUBA 75.08 Sistemas Operativ os

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

FIUBA 75.08 Sistemas Operativ os

Expresiones Regulares

27

Expresiones Regulares
Archivo F.sql
CREATE OR REPLACE FUNCTION my_true RETURN NUMBER IS BEGIN RETURN TRUE; END my_true ;

FIUBA 75.08 Sistemas Operativ os

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

FIUBA 75.08 Sistemas Operativ os

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.

FIUBA 75.08 Sistemas Operativ os

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

Solo se permite el uso de grep,

<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

FIUBA 75.08 Sistemas Operativ os

Anda mungkin juga menyukai