[bash] problema con GREP

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Savio1981
Linux 0.x
Linux 0.x
Messaggi: 3
Iscritto il: mer 13 feb 2008, 9:55

[bash] problema con GREP

Messaggio 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 :(

Avatar utente
whites11
Linux 4.x
Linux 4.x
Messaggi: 1147
Iscritto il: ven 30 set 2005, 13:54
Località: Udine

Re: [bash] problema con GREP

Messaggio 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

sixjan
Linux 2.x
Linux 2.x
Messaggi: 413
Iscritto il: dom 6 gen 2008, 11:46
Slackware: 14.1
Kernel: 3.10.17-smp
Desktop: Xfce 4.10

Re: [bash] problema con GREP

Messaggio da sixjan »

cp `grep -w -m1 pippo a* | cut -f1 -d:` ./tmp

Savio1981
Linux 0.x
Linux 0.x
Messaggi: 3
Iscritto il: mer 13 feb 2008, 9:55

Re: [bash] problema con GREP

Messaggio 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!

Avatar utente
harakei
Packager
Packager
Messaggi: 118
Iscritto il: lun 19 dic 2005, 15:57
Slackware: 13-current
Kernel: 2.6.32.7-ck2
Desktop: kde
Località: Taranto
Contatta:

Re: [bash] problema con GREP

Messaggio da harakei »

io ne ho trovato uno, se vuoi, e solo se vuoi te lo passo.

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: [bash] problema con GREP

Messaggio 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. ;)

Savio1981
Linux 0.x
Linux 0.x
Messaggi: 3
Iscritto il: mer 13 feb 2008, 9:55

Re: [bash] problema con GREP

Messaggio 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

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: [bash] problema con GREP

Messaggio da aschenaz »

Offtopic: P.S.: Benvenuto su Slacky! :D

sixjan
Linux 2.x
Linux 2.x
Messaggi: 413
Iscritto il: dom 6 gen 2008, 11:46
Slackware: 14.1
Kernel: 3.10.17-smp
Desktop: Xfce 4.10

Re: [bash] problema con GREP

Messaggio da sixjan »

Effettivamente il mio comando era inutilmente ridondante :D

Ciao

Avatar utente
ZeD
Linux 1.x
Linux 1.x
Messaggi: 112
Iscritto il: ven 28 ott 2005, 12:30
Slackware: 12.1
Località: Terra

Re: [bash] problema con GREP

Messaggio 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)

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: [bash] problema con GREP

Messaggio 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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

sixjan
Linux 2.x
Linux 2.x
Messaggi: 413
Iscritto il: dom 6 gen 2008, 11:46
Slackware: 14.1
Kernel: 3.10.17-smp
Desktop: Xfce 4.10

Re: [bash] problema con GREP

Messaggio 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 :)

Avatar utente
stan
Linux 3.x
Linux 3.x
Messaggi: 524
Iscritto il: lun 25 dic 2006, 11:55
Slackware: 12.1
Kernel: 2.6.xx
Desktop: Kde3
Località: Bs

Re: [bash] problema con GREP

Messaggio 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:

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: [bash] problema con GREP

Messaggio 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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
ZeD
Linux 1.x
Linux 1.x
Messaggi: 112
Iscritto il: ven 28 ott 2005, 12:30
Slackware: 12.1
Località: Terra

Re: [bash] problema con GREP

Messaggio 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è

Rispondi