====== Examen Parcial - 75.08. Sistemas Operativos ====== **Cátedra:** Osvaldo Clua\\ **Fecha:** Tercera oportunidad \\ **Día:** ??/??/????\\ **Tema:** Regular Expression Esta página está incompleta; podés ayudar completando el material. ===== Enunciado ===== Un restaurant nos pide realizar un script que muestre los vinos de su cava con año de cosecha **anterior** a 2002. Para esto contamos con el archivo CAVA.stk del que SOLO sabemos lo siguiente:\\ * Sus campos se encuentran separados por '+' \\ * El primer campo es el nombre de etiqueta.\\ * El segundo campo es la nota de cata.\\ * El tercer campo es el cepaje. **En caso de ser un vino de corte este campo se encuentra nulo.**\\ * El cuarto campo es el maridaje sugerido.\\ * El quinto campo es la temperatura de servicio.\\ * El sexto campo es el año de cosecha.\\ * El séptimo campo es la bodega.\\ La información a listar debe incluir el nombre de etiqueta, la bodega y si es o no un vino de corte. Ejemplo de salida: ==== Ejemplo de salida: ==== MALBEC D.O.C Luigi Bosca NO CORTE CASTEL Bodega Chandon CORTE Importante: solo se pueden usar los comandos grep y sed. ===== Resolución ===== #!/bin/bash ARCHIVO="cava.stk" #expresiones regulares para filtrar los distintos vinos segun corte o no corte CORTE="^[^*]*+[^+]*++.*" #filtra vinos de corte NOCORTE="^[^*]*+[^+]*+[^+][^+]*+.*" #filtra vinos de no corte R1="200[0-1]" #año de cosecha entre 2000 y 2001 R2="1[0-9]\{3\}" #año de cosecha entre 1000 y 1999 R3="[0-9]\{1,3\}" #años entre 0 y 999 REGINICIO="s/^\([^+]*\)+[^+]*+[^+]*+[^+]*+[^+]*+" REGFIN="+\([^+]*\).*" #Imprimo vinos de corte anteriores a 2002 sed -n "/$CORTE/$REGINICIO$R1$REGFIN/ \1 \2 CORTE/p" < $ARCHIVO sed -n "/$CORTE/$REGINICIO$R2$REGFIN/ \1 \2 CORTE/p" < $ARCHIVO sed -n "/$CORTE/$REGINICIO$R3$REGFIN/ \1 \2 CORTE/p" < $ARCHIVO #Imprimo vinos de no corte anteriores a 2002 sed -n "/$NOCORTE/$REGINICIO$R1$REGFIN/ \1 \2 CORTE/p" < $ARCHIVO sed -n "/$NOCORTE/$REGINICIO$R2$REGFIN/ \1 \2 CORTE/p" < $ARCHIVO sed -n "/$NOCORTE/$REGINICIO$R3$REGFIN/ \1 \2 CORTE/p" < $ARCHIVO exit 0 ===== Otra Resolución ===== #!/bin/bash HEAD='^\([^+]*\)+[^+]*+\([^+]*\)+[^+]*+[^+]*+' FULL="$HEAD"'[^+]*+\([^+]*\)' #Filtro por año grep "$HEAD"'[0-1]' >cava.temp grep "$HEAD"'200[0-1]' >cava.temp # Muestro según corte sed -n \ -e '/++/ ! s/[^+]*/NO CORTE/3' \ -e '/++/ s/++/+CORTE+/' \ -e 's/'"$FULL"'/\1 | \3 | \2/p' \