Pagina 1 di 1

[bash] problema con GREP

Inviato: mer feb 13, 2008 10:00
da Savio1981
Salve a tutti, non riesco a capire come fare questo script.. => Selezionare tutti i file nella directory corrente che iniziano con a,b, o c e che contengano almeno 1 volta la parola "pippo" e copiarli nella directory ./tmp

Immagino che per Voi guru sia una stupidata ma io mi sto impastando da 2 giorni :(

Re: [bash] problema con GREP

Inviato: mer feb 13, 2008 10:19
da whites11
con il seguente comando ottieni l'elenco dei file che contengono "pippo" e il cui nome inizia per "a"

Codice: Seleziona tutto

grep "pippo" ./a* -l


il resto studiatelo :)
man grep è un buon punto d'inizio

Re: [bash] problema con GREP

Inviato: mer feb 13, 2008 10:28
da sixjan
cp `grep -w -m1 pippo a* | cut -f1 -d:` ./tmp

Re: [bash] problema con GREP

Inviato: mer feb 13, 2008 10:31
da Savio1981
whites11 ha scritto:con il seguente comando ottieni l'elenco dei file che contengono "pippo" e il cui nome inizia per "a"

Codice: Seleziona tutto

grep "pippo" ./a* -l


il resto studiatelo :)
man grep è un buon punto d'inizio



Grazie mille della risposta, io ero arrivato a questo:

grep "pippo" [abc]* -l

che effettivamente mi lista i file di cui ho bisogno.. il problema che incontravo era semplicemente che non avevo idea di come utilizzare quell'output :)

cioè..ora che so quali files copiare non so come copiarli... hai ragione, sono abbastanza n-bye..ma nn mi arrendo.. continuerò a cercare un costrutto che possa funzionare..

grazie ancora e ciao!

Re: [bash] problema con GREP

Inviato: mer feb 13, 2008 10:41
da harakei
io ne ho trovato uno, se vuoi, e solo se vuoi te lo passo.

Re: [bash] problema con GREP

Inviato: mer feb 13, 2008 10:48
da aschenaz
ora che so quali files copiare non so come copiarli

La risposta te l'ha già data sixjan: quello che includi tra apici invertiti è l'output di un comando che passi ad un altro comando. ;)

Re: [bash] problema con GREP

Inviato: mer feb 13, 2008 10:50
da Savio1981
aschenaz ha scritto:
ora che so quali files copiare non so come copiarli

La risposta te l'ha già data sixjan: quello che includi tra apici invertiti è l'output di un comando che passi ad un altro comando. ;)


cp `grep "pippo" [abc]* -l` ./tmp

funziona!

però ho capito anche xè si usa cut in pipe con grep...ty

Re: [bash] problema con GREP

Inviato: mer feb 13, 2008 10:55
da aschenaz
Offtopic: P.S.: Benvenuto su Slacky! :D

Re: [bash] problema con GREP

Inviato: mer feb 13, 2008 11:16
da sixjan
Effettivamente il mio comando era inutilmente ridondante :D

Ciao

Re: [bash] problema con GREP

Inviato: mer feb 13, 2008 12:10
da ZeD
mi spiace per voi, ma quello scriptino ha problemi se ci sono in ballo files con spazi

Codice: Seleziona tutto

$ echo "pippo" > 'a file con spazi'
$ echo "pippo" > 'b file con spazi'
$ cp `grep "pippo" [abc]* -l` ./tmp/
cp: impossibile fare stat di `a': No such file or directory
cp: impossibile fare stat di `file': No such file or directory
cp: impossibile fare stat di `con': No such file or directory
cp: impossibile fare stat di `spazi': No such file or directory
cp: impossibile fare stat di `b': No such file or directory
cp: impossibile fare stat di `file': No such file or directory
cp: impossibile fare stat di `con': No such file or directory
cp: impossibile fare stat di `spazi': No such file or directory
$

e anche usando i doppi apici in modo naïve

Codice: Seleziona tutto

$ cp "`grep "pippo" [abc]* -l`" ./tmp/
cp: impossibile fare stat di `a file con spazi\nb file con spazi': No such file or directory
$


invece lasciate fare il lavoro di glob extension alla shell :D

Codice: Seleziona tutto

$ for file in [abc]*; do
    if grep "pippo" "$file" > /dev/null; then
        cp "$file" ./tmp;
    fi;
done
$


(tra l'altro l'ultima versione è oggettivamente più leggibile)

Re: [bash] problema con GREP

Inviato: mer feb 13, 2008 12:18
da targzeta
ZeD ha scritto:....
invece lasciate fare il lavoro di glob extension alla shell :D

Codice: Seleziona tutto

$ for file in [abc]*; do
    if grep "pippo" "$file" > /dev/null; then
        cp "$file" ./tmp;
    fi;
done
$


(tra l'altro l'ultima versione è oggettivamente più leggibile)...


E perchè non questo?

Codice: Seleziona tutto

(IFS="\n\t"; cp `grep "pippo" [abc]* -l` ./tmp)


Per quanto riguarda la leggibilità, penso che sia sempre e comunque soggettiva, quelli di matrix vedevano ragazze nello schermo verde :).

Spina

Re: [bash] problema con GREP

Inviato: mer feb 13, 2008 12:53
da sixjan
ZeD ha scritto:E perchè non questo?

Codice: Seleziona tutto
(IFS="\n\t"; cp `grep "pippo" [abc]* -l` ./tmp)



Per quanto riguarda la leggibilità, penso che sia sempre e comunque soggettiva, quelli di matrix vedevano ragazze nello schermo verde :).


Aggiungerei l'opzione "-w" a grep per non avere falsi positivi come pippolo, strapippo,
impippo :)

Re: [bash] problema con GREP

Inviato: mer feb 13, 2008 13:58
da stan
spina ha scritto:E perchè non questo?

Codice: Seleziona tutto

(IFS="\n\t"; cp `grep "pippo" [abc]* -l` ./tmp)

Per quanto riguarda la leggibilità, penso che sia sempre e comunque soggettiva, quelli di matrix vedevano ragazze nello schermo verde :).
Spina

Offtopic: Spina, per lo slackbuild ati-packager....guarda che io non sono Neo! :lol: :badgrin:

Re: [bash] problema con GREP

Inviato: mer feb 13, 2008 19:55
da targzeta
stan ha scritto:Offtopic: Spina, per lo slackbuild ati-packager....guarda che io non sono Neo! :lol: :badgrin:

Offtopic: Secondo me ti devo solo portare dall'oracolo :).

Spina

Re: [bash] problema con GREP

Inviato: sab feb 16, 2008 23:19
da ZeD
spina ha scritto:E perchè non questo?

Codice: Seleziona tutto

(IFS="\n\t"; cp `grep "pippo" [abc]* -l` ./tmp)

Spina

Fallo in una directory dove l'elenco esteso di "[abc]*" supera i 1024 caratteri (limite massimo, in genere, per il buffer di argv dei programmi scritti in c) e capirai perchè