hola,
tengo un problemilla con un script.
el caso es que me funciona correctamente, ya que me hace las busquedas, pero lo que quiero es que me muestre dos lineas completas.
El script busca en un fichero plano los campos parecidos a lo que introduzca, entonces, me gustaría que cuando encuentre algún campo me muestre los resultados pero cogiendo las dos lineas...
este es el script:
Código:
# Global variables
film=/opt/etc/film/film.txt
export film
confirm()
{
echo -en "$@"
read ans
ans=`echo $ans | tr '[a-z]' '[A-Z]'`
if [ "$ans" == "Y" ]; then
return 0
else
return 1
fi
}
num_lines()
{
grep -i "$@" $film|wc -l| awk '{ print $1 }'
}
find_lines()
{
# Busca lineas de entrada $1
res=-1
if [ ! -z "$1" ]; then
grep -i "$@" $film
res=$?
fi
return $res
}
list_items()
{
# Lista los resultados encontrados
if [ "$#" -eq "0" ]; then
echo -en "Buscar usuario: (en blanco muesta toda la lista): "
read search
if [ -z "$search" ]; then
search="."
fi
echo
else
search="$@"
fi
find_lines "${search}" | while read i
do
echo "$i" | tr ':' '\t'
done
echo -en "Encontrados: "
num_lines "$search"
}
add_item()
{
echo
echo
echo
echo " NUEVA PELI"
echo " COMPLETA TODOS LOS DATOS"
echo " - AÑO MES DIA DIRECTOR TIPO - "
echo
echo -en "Nombre: "
read name
find_lines "^${name}:"
if [ `num_lines "^${name}:"` -ne "0" ]; then
echo "Pelicula, $name ya existe en el fichero."
return
fi
echo -en "Año: "
read "ano"
echo -en "Director: "
read filmaker
echo -en "Genero:"
read genre
echo -en "Calificacion:"
read calification
# Confirmacion
echo "${name} AnoPelicula=${ano}
${calification}, ${filmaker}, ${genre}" >> $film
echo
echo
echo -en "--> ALTA FILM"
echo
echo
}
locate_single_item()
{
echo -en "Peli a buscar: "
read search
n=`num_lines "$search"`
if [ -z "$n" ]; then
n=0
fi
while [ "${n}" -ne "1" ]; do
#list_items "$search"
echo -en "${n} peli encontrada. Selecciona una "
case "$n" in
"0") echo "menos" ;;
"*") echo "mas" ;;
esac
echo "especifica un patron de busqueda (q para volver al menu anterior): "
read search
if [ "$search" == "q" ]; then
return 0
fi
n=`num_lines "$search"`
done
return `grep -in $search $film |cut -d":" -f1`
}
#remove_item()
#{
# locate_single_item
# search=`head -2 $film`
# if [ -z "${search}" ]; then
# return
# fi
# list_items "$search"
# confirm "Borrar?"
# if [ "$?" -eq "0" ]; then
# grep -v "$search" $film > ${film}.tmp ; mv ${film}.tmp ${film}
# else
# echo "NO BORRADO"
# fi
#}
edit_item()
{
locate_single_item
search=`head -$? $film | tail -1|tr ' ' '.'`
if [ -z "${search}" ]; then
return
fi
list_items "$search"
thisline=`grep -i "$search" $film`
oldname=`echo $thisline|cut -d"" -f1`
oldano=`echo $thisline|cut -d"," -f2`
oldfilmaker=`echo $thisline|cut -d"," -f3`
oldcalification=`echo $thisline|cut -d"," -f4`
oldgenre=`echo $thisline|cut -d"," -f5`
echo "BUSCAR : $search"
grep -v "$search" $film > ${film}.tmp ; mv ${film}.tmp ${film}
echo -en "Pelicula [ $oldname ] "
read name
if [ -z "$name" ]; then
name=$oldname
fi
find_lines "^${name}:"
if [ `num_lines "^${name}:"` -ne "0" ]; then
echo "La pelicula, $name esta en el fichero."
return
fi
echo -en "ano [ $oldano ] "
read ano
if [ -z "$ano" ]; then
ano=$oldano
fi
echo -en "Pelicula [ $oldfilmaker ] "
read filmaker
if [ -z "$filmaker" ]; then
filmaker=$oldfilmaker
fi
echo "${name}:${ano}:${filmaker}" >> $film
}
alguien me puede decir, como hago para que me muestre las dos lineas..¿??
gracias.
takezo