Cátedra: Osvaldo Clua
Fecha: Primera oportunidad - Segundo Cuatrimestre 2008
Día: 04/11/2008
Tema: Regular Expressions - Tema 1
Una comercializadora de bebidas nos pide que desarrollemos un script que reciba Bodega y año de cosecha
como parámetros obligatorios y muestre por pantalla el nombre de etiqueta de todos los registros que sean
de esa bodega, de ese año y existan hasta 95 botellas.
Para ello contamos con un archivo llamado WINE_STOCK.dat con el siguiente formato:
Establecimiento|Bodega|Etiqueta|Fecha de cosecha|Cantidad de botellas|Composición
El formato de Fecha es dd-mm-aaaa
Importante: Solo se pueden utilizar los cmds grep y sed. No se permiten expresiones regulares extendidas.
#!/bin/bash BODEGA="$1" ANIO="$2" #Filtra solo los vinos que concuerdan con bodega y anio: FILTRO1="^[^|]*|$BODEGA|[^|]*|[0-9]\{2\}-[0-9]\{2\}-$ANIO|.*" #Filtra solo las botellas con cantidad entre 0 y 89: FILTRO2="^[^|]*|[^|]*|[^|]*|[^|]*|[0-8]\{0,1\}[0-9]|.*" #Filtra solo las botellas con cantidad entre 90 y 95: FILTRO3="^[^|]*|[^|]*|[^|]*|[^|]*|[9][0-5]|.*" #Filtra y deja el Nombre de Etiqueta en el grupo 1 FILTRO4="^[^|]*|[^|]*|\([^|]*\)|.*" #Muestro por pantalla solo el Nombre de Etiqueta de los vinos requeridos: grep <"WINE_STOCK.dat" "$FILTRO1" | sed -n -e "/$FILTRO2/p" -e "/$FILTRO3/p" | sed "s/$FILTRO4/\1/"
Otra forma:
#!/bin/bash #Salvo que lo pidan, no es necesario chequear los parámetros EXP1="[^|]*|$1|[^|]*|[^-]*-[^-]*-$2|[0-9][0-9]|.*" EXP2="[^-]*-[^-]*-$2|9[6-9]|.*" grep $EXP1 WINE_STOCK.dat | grep -v $EXP2 | sed 's/[^|]*|[^|]*|\([^|]*\)|[^-]*-.*/\1/'