Foros del Web » Administración de Sistemas » Unix / Linux »

No me funciona el siguiente scrit de busqueda

Estas en el tema de No me funciona el siguiente scrit de busqueda en el foro de Unix / Linux en Foros del Web. Hola Grupo, alguien me puede decir que me falta para que funcione el siguiente scrit de búsqueda. Cuando lo ejecuto no me muestra los ficheros ...
  #1 (permalink)  
Antiguo 20/08/2009, 01:22
Avatar de jmfp26  
Fecha de Ingreso: diciembre-2003
Mensajes: 162
Antigüedad: 21 años
Puntos: 2
Exclamación No me funciona el siguiente scrit de busqueda

Hola Grupo,

alguien me puede decir que me falta para que funcione el siguiente scrit de búsqueda.

Cuando lo ejecuto no me muestra los ficheros donde esta la cadena de lo que busco.

El código es el siguiente:
busca.sh

#!/bin/sh

read -p "Ingrese el texto que desea buscar: " texto1
echo ""
grep -r "$texto1" home/ | awk -F: '{ print $1 }' > listado.txt
echo "Los archivos donde esta el texto buscado son: "
echo ""
contador=`cat listado.txt | wc -l`

if [ $contador = 1 ]; then
echo ""
echo "El texto \"$texto1\" fue encontrado $contador vez"
echo ""
else
echo ""
echo "El texto \"$texto1\" fue encontrado $contador veces"
echo ""
fi

read -p "Desea reemplazar el texto por otro? [y/n]: " N
case $N in
y)
read -p "Ingrese el texto nuevo: " texto2
for i in `cat listado.txt`
do
cat $i | sed -e s/"$texto1"/"$texto2"/g > $i
done
read -p "Desea buscar otro texto? [y/n]: " N
case $N in
y)
rm listado.txt
./$0;;
n)
rm listado.txt
(exit);;
esac;;
n)

read -p "Desea buscar otro texto? [y/n]: " N
case $N in
y)
rm listado.txt
./$0;;
n)
rm listado.txt
(exit);;
esac;;
esac

Gracias

Un saludo
  #2 (permalink)  
Antiguo 20/08/2009, 11:58
Avatar de AleSanchez
Colaborador
 
Fecha de Ingreso: septiembre-2004
Ubicación: Buenos Aires, Argentina
Mensajes: 3.692
Antigüedad: 20 años, 3 meses
Puntos: 47
Respuesta: No me funciona el siguiente scrit de busqueda

Porque no lo estas mostrando...
Deberias agregar en el script algo como:
Código bash:
Ver original
  1. cat listado.txt

Saludos.
__________________
¡Volviendo a la programación!
  #3 (permalink)  
Antiguo 21/08/2009, 06:11
Avatar de jmfp26  
Fecha de Ingreso: diciembre-2003
Mensajes: 162
Antigüedad: 21 años
Puntos: 2
Exclamación Respuesta: No me funciona el siguiente scrit de busqueda

Hola,

Gracias por la aclaración. Ya me funciona.

Pero tengo un problema. Resulta que cuando le digo que si quiero remplazar el texto, me he dado cuenta que al fichero.txt le inyecta la ruta del directorio, y luego deja en blanco el fichero que quiero remplazar.

Podrías probarlo para que veas lo que te digo.

Muchas gracias

saludos
  #4 (permalink)  
Antiguo 03/11/2009, 06:37
Avatar de jmfp26  
Fecha de Ingreso: diciembre-2003
Mensajes: 162
Antigüedad: 21 años
Puntos: 2
Exclamación Respuesta: No me funciona el siguiente scrit de busqueda

Hola,

He investigado un poco y resulta que como yo tenia el scrit:

#!/bin/sh

read -p "Ingrese el texto que desea buscar: " texto1
echo ""
grep -r "$texto1" /home/ | awk -F: '{ print $1 }' > listado.txt
echo "Los archivos donde esta el texto buscado son: "
cat listado.txt
echo ""
contador=`cat listado.txt | wc -l`

if [ $contador = 1 ]; then
echo ""
echo "El texto \"$texto1\" fue encontrado $contador vez"
echo ""
else
echo ""
echo "El texto \"$texto1\" fue encontrado $contador veces"
echo ""
fi

read -p "Desea reemplazar el texto por otro? [y/n]: " N
case $N in
y)
read -p "Ingrese el texto nuevo: " texto2
for i in `cat listado.txt`
do
cat $i | sed -e s/"$texto1"/"$texto2"/g > $i
done
read -p "Desea buscar otro texto? [y/n]: " N
case $N in
y)
rm listado.txt
./$0;;
n)
rm listado.txt
(exit);;
esac;;
n)

read -p "Desea buscar otro texto? [y/n]: " N
case $N in
y)
rm listado.txt
./$0;;
n)
rm listado.txt
(exit);;
esac;;
esac

Lo que hace es que los ficheros que contengan la palabra que busco, los deja en blanco. Es como si limpiara de contenido los ficheros.
No me funciona. Y si ejecuto la siguiente linea:

sed -i 's/Hola/Adios/g' prueba.txt

Si funciona pero solo con el fichero prueba.

Por otro lado con esta orden también funciona a todos los ficheros con ese rango:

find . -name "*.txt" -exec sed -i 's/TEXTO1/TEXTO2/g' {} \;


Creo que el error esta en la linea:

for i in `cat listado.txt`
do
cat $i | sed -e s/"$texto1"/"$texto2"/g > $i
done

Pero no lo veo.

Alguien me puede ayudar.

Gracias

Última edición por jmfp26; 03/11/2009 a las 07:00
  #5 (permalink)  
Antiguo 06/11/2009, 07:57
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: No me funciona el siguiente scrit de busqueda

Sip, el error está en esa línea.
Si no me equivoco debería ser
Código:
sed -e 's/$texto1/$texto2/g' $i > $i
Ya que sed recibe como parámetro el archivo sobre el que debe trabajar.

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:17.