====== 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á.