====== Examen Parcial - 75.08. Sistemas Operativos ======
**Cátedra:** Osvaldo Clua\\
**Fecha:** Primera oportunidad - Segundo Cuatrimestre 2008\\
**Día:** 04/11/2008\\
**Tema:** Regular Expressions - Tema 1
===== Enunciado =====
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.
===== Resolución =====
#!/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/'
===== Discusión =====
Si ves algo que te parece incorrecto en la resolución y no te animás a cambiarlo, dejá tu comentario acá.