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