Newsgroup: it.comp.os.linux.iniziare
Titolo: Ricerca dei file contenenti una stringa.

Ciao.
Sono un inesperto pressoché totale di Linux e, per motivi che non sto a 
spiegarvi per non farvi perdere tempo, avrei bisogno di sapere qual è il 
comando da dare per far stampare a schermo i nomi ed il percorso di 
tutti i file contenenti una certa stringa.
Sto cercando di aiutarmi con i manuali e con ricerche su Google, ma sono 
troppo ignorante per non perdermi tra le mille opzioni di tutti i 
comandi.
La stringa in questione è "brltty -b", e nei file in cui compare, può 
essere scritta in maiuscolo o in minuscolo.
Potete aiutarmi?
Grazie e saluti a tutti.
Bizio.

 grep -il 'brltty -b' *
Le opzioni -i e -l servono per ignorare la differenza tra
maiuscole/minuscole, e per stampare solo il nome dei files (è scritto
chiaramente nel man)
La stringa che ricerchi deve essere incluse tra apici singoli ('') perchè
contiene caratteri speciali come lo spazio e il '-'.
L'asterisco dice a bash di eseguire grep su tutti i files della
directory corrente (altrimenti devi mettere il path corretto)
Ci sono tanti tutorial su questo. Te ne posso consigliare uno in
catalano. Se un giorno ti volessi fare male, studiati anche gawk.

dalloliogm wrote:

se può servire ho fatto uno scriptino basato sui tuoi suggerimenti (ho
aggiunto -i a grep eheh!):
--
#!/bin/bash
#help
usage () {
        echo "USAGE: $0 <option> <key word>"
        echo -ne "OPTION:\n"
        echo -ne "\t-R recoursive mode\n"
        echo -ne "\t-h this help\n"
        exit 1
}
#find a world in a file
cerca() {
        for i in $1;
        do
                temp=${i##*.}
                case $temp in
                o | ko | tar | tar.gz | gz |tar.bz2 | bz2 | zip | rpm | deb
| tgz | pdf | chm)
                        continue
                        ;;
                *)
                        if [ -f "$i" ]
                        then
                                if [ "`cat "$i"|grep $2`" ]
                                then
                                        if [ "$1" == "*" ]
                                        then
                                                echo -e "\033[31;2m In File
\033[31;4m$PWD/$i\033[0m\033[31;2m:\033[0m"
                                        else
                                                file=${i#*.}
                                                echo -e "\033[31;2m In File
\033[31;4m$PWD$file\033[0m\033[31;2m:\033[0m"
                                        fi
                                        echo -e "\033[31;2m at row \033[0m"
                                        grep -in $2 $i
                                fi
                        fi
                        ;;
                esac
        done
}
#recoursive mode
recoursive() {
        LIST_DIR=`ls -R|grep :|cut -d\: -f1`
        for dir in $LIST_DIR;
        do
                cerca "$dir/*" "$1"
        done
}
#check passing argouments
if [ $# -gt 2 ]
then
        usage
fi
#check if $1 is an option or not
case $1 in
-R | -r )
        if [ "$2" == "" ]
        then
                usage
        fi
        recoursive "$2"
        ;;
--help | -h )
        usage
        ;;
*)
        if [ "$1" == "" ]
        then
                usage
        fi
        cerca "*" "$1"
        ;;
esac
exit 0
--

 exit 0
I think is hard to find a world in a file with that
recoursive argouments... :-)
 

Fabrizio Marini wrote:

find <path iniziale> -type f -exec grep -Hi "brltty -b" 

Metallikop wrote:

già! infatti è uno scriptino che ho fatto per diletto...
avrei potuto usare find e grep o con locate ed xargs...

 usare find e grep o con locate ed xargs...
Ah, pensavo fossero errori di battitura, ma insisti...
Volevo solo farti notare che è difficile trovare un mondo dentro un file,
con argoumenti ricoursivi. Ci arrivi adesso ?? :-)))
word, recursive, arguments...

Metallikop wrote:

azz! hihihi!
ok ci sono arrivato!

 find <path iniziale> -type f -exec grep -Hi "brltty -b" 
Ciao,
 credo che questo comando non funzioni perche' manca un punto e virgola 
(quotato) alla fine:
find <path iniziale> -type f -exec grep -Hi "brltty -b" \;
Per evitare di far partire un grep diverso per ogni file si puo' usare 
xargs:
find <path iniziale> -type f -print0 |
 xargs --null --no-run-if-empty grep -Hi "brltty -b"
 Ciao
 Federico

 xargs: [cut]
Oppure usare semplicemente l'opzione -r di grep:ho visto con orrore questa
ridda di scripts,di find,di ls -R e deliri di bash... TMTOWTDI,ma si
fa molto prima ricordandosi che e` sempre meglio KISS

 (quotato) alla fine:
Vero. Quando lo faccio in shell mi viene automatico. Chissa perche` in altri
contesti no!

 Oppure usare semplicemente l'opzione -r di grep:ho visto con orrore questa
Hai ragione. Ahime`, sul vecchio sco il grep non aveva quell'opzione e mi e`
rimasto 'in canna'.