Repository 32bit  Forum
Repository 64bit  Wiki

[bash] problema con GREP

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata e la versione del Kernel. Questi dati aiutano le persone che possono rispondere.
2) Specificare sempre il tipo di shell (bash, sh, csh, etc...)
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 dell'ultima regola porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

[bash] problema con GREP

Messaggioda Savio1981 » mer feb 13, 2008 11:00

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 :(
Savio1981
Linux 1.0
Linux 1.0
 
Messaggi: 3
Iscritto il: mer feb 13, 2008 10:55

Re: [bash] problema con GREP

Messaggioda whites11 » mer feb 13, 2008 11:19

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
Avatar utente
whites11
Linux 3.x
Linux 3.x
 
Messaggi: 1147
Iscritto il: ven set 30, 2005 13:54
Località: Udine

Re: [bash] problema con GREP

Messaggioda sixjan » mer feb 13, 2008 11:28

cp `grep -w -m1 pippo a* | cut -f1 -d:` ./tmp
sixjan
Linux 2.4
Linux 2.4
 
Messaggi: 383
Iscritto il: dom gen 06, 2008 12:46
Slackware: 12.2
Kernel: 2.6.27.31
Desktop: KDE 3.5.10

Re: [bash] problema con GREP

Messaggioda Savio1981 » mer feb 13, 2008 11:31

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!
Savio1981
Linux 1.0
Linux 1.0
 
Messaggi: 3
Iscritto il: mer feb 13, 2008 10:55

Re: [bash] problema con GREP

Messaggioda harakei » mer feb 13, 2008 11:41

io ne ho trovato uno, se vuoi, e solo se vuoi te lo passo.
Avatar utente
harakei
Packager
Packager
 
Messaggi: 118
Iscritto il: lun dic 19, 2005 16:57
Località: Taranto
Slackware: 13-current
Kernel: 2.6.32.7-ck2
Desktop: kde

Re: [bash] problema con GREP

Messaggioda aschenaz » mer feb 13, 2008 11:48

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. ;)
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4258
Iscritto il: mer lug 28, 2004 0:00
Località: Reggio Calabria
Nome Cognome: Antonino Branca
Slackware: current 64bit
Kernel: 3.8.11
Desktop: KDE 4.10.3

Re: [bash] problema con GREP

Messaggioda Savio1981 » mer feb 13, 2008 11:50

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
Savio1981
Linux 1.0
Linux 1.0
 
Messaggi: 3
Iscritto il: mer feb 13, 2008 10:55

Re: [bash] problema con GREP

Messaggioda aschenaz » mer feb 13, 2008 11:55

Offtopic: P.S.: Benvenuto su Slacky! :D
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4258
Iscritto il: mer lug 28, 2004 0:00
Località: Reggio Calabria
Nome Cognome: Antonino Branca
Slackware: current 64bit
Kernel: 3.8.11
Desktop: KDE 4.10.3

Re: [bash] problema con GREP

Messaggioda sixjan » mer feb 13, 2008 12:16

Effettivamente il mio comando era inutilmente ridondante :D

Ciao
sixjan
Linux 2.4
Linux 2.4
 
Messaggi: 383
Iscritto il: dom gen 06, 2008 12:46
Slackware: 12.2
Kernel: 2.6.27.31
Desktop: KDE 3.5.10

Re: [bash] problema con GREP

Messaggioda ZeD » mer feb 13, 2008 13:10

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
ZeD
Linux 2.0
Linux 2.0
 
Messaggi: 112
Iscritto il: ven ott 28, 2005 12:30
Località: Terra
Slackware: 12.1

Re: [bash] problema con GREP

Messaggioda targzeta » mer feb 13, 2008 13:18

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
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 5914
Iscritto il: gio nov 03, 2005 15:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [bash] problema con GREP

Messaggioda sixjan » mer feb 13, 2008 13:53

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 :)
sixjan
Linux 2.4
Linux 2.4
 
Messaggi: 383
Iscritto il: dom gen 06, 2008 12:46
Slackware: 12.2
Kernel: 2.6.27.31
Desktop: KDE 3.5.10

Re: [bash] problema con GREP

Messaggioda stan » mer feb 13, 2008 14:58

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
stan
Linux 2.6
Linux 2.6
 
Messaggi: 524
Iscritto il: lun dic 25, 2006 12:55
Località: Bs
Slackware: 12.1
Kernel: 2.6.xx
Desktop: Kde3

Re: [bash] problema con GREP

Messaggioda targzeta » mer feb 13, 2008 20:55

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
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 5914
Iscritto il: gio nov 03, 2005 15:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [bash] problema con GREP

Messaggioda ZeD » dom feb 17, 2008 0:19

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è
Avatar utente
ZeD
Linux 2.0
Linux 2.0
 
Messaggi: 112
Iscritto il: ven ott 28, 2005 12:30
Località: Terra
Slackware: 12.1


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti