Pagina 1 di 1
[bash] problema con GREP
Inviato: mer 13 feb 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 13 feb 2008, 10:19
da whites11
con il seguente comando ottieni l'elenco dei file che contengono "pippo" e il cui nome inizia per "a"
il resto studiatelo

man grep è un buon punto d'inizio
Re: [bash] problema con GREP
Inviato: mer 13 feb 2008, 10:28
da sixjan
cp `grep -w -m1 pippo a* | cut -f1 -d:` ./tmp
Re: [bash] problema con GREP
Inviato: mer 13 feb 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"
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 13 feb 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 13 feb 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 13 feb 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 13 feb 2008, 10:55
da aschenaz
Offtopic: P.S.: Benvenuto su Slacky! 
Re: [bash] problema con GREP
Inviato: mer 13 feb 2008, 11:16
da sixjan
Effettivamente il mio comando era inutilmente ridondante
Ciao
Re: [bash] problema con GREP
Inviato: mer 13 feb 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
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 13 feb 2008, 12:18
da targzeta
ZeD ha scritto:....
invece lasciate fare il lavoro di glob extension alla shell
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?
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 13 feb 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 13 feb 2008, 13:58
da stan
spina ha scritto:
E perchè non questo?
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!

Re: [bash] problema con GREP
Inviato: mer 13 feb 2008, 19:55
da targzeta
Re: [bash] problema con GREP
Inviato: sab 16 feb 2008, 23:19
da ZeD
spina ha scritto:E perchè non questo?
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è