grep???
Moderatore: Staff
Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
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.
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
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.
grep???
Devo cercare una stringa all'interno di tutti i files con estensione *.c contenuti in una directory e sottodirectory. Qual e' il comando da usare?
Pensavo che grep -R "stringa" /dir/*c funzionasse....
Grazie!
Z
Pensavo che grep -R "stringa" /dir/*c funzionasse....
Grazie!
Z
- anycolouryoulike
- Packager

- Messaggi: 1158
- Iscritto il: ven 10 ago 2007, 0:00
- Slackware: 12.2
- Kernel: 2.6.34.8
- Desktop: KDE 3.5.10
Non so se è il metodo migliore ma funziona di sicuro:
Codice: Seleziona tutto
ls -R <directory>/*.c | xargs grep <stringa>- albatros
- Iper Master

- Messaggi: 2098
- Iscritto il: sab 4 feb 2006, 13:59
- Kernel: 6.18.0
- Desktop: gnome and lxqt
- Distribuzione: Ubuntu 24.04 & FC 41
- Località: Darmstadt - Germania
Codice: Seleziona tutto
find . -depth -name "*.c" -exec grep -H "scanf" {} \;
Ultima modifica di albatros il lun 10 dic 2007, 14:53, modificato 2 volte in totale.
- Paoletta
- Staff

- Messaggi: 3975
- Iscritto il: lun 25 apr 2005, 0:00
- Slackware: 14.2 - 64 bit
- Desktop: fluxbox
- Località: Varese
Re: grep???
zosty ha scritto:Devo cercare una stringa all'interno di tutti i files con estensione *.c contenuti in una directory e sottodirectory. Qual e' il comando da usare?
Pensavo che grep -R "stringa" /dir/*c funzionasse....
Grazie!
Z
Codice: Seleziona tutto
find /home/zosty/ltib-imx21ads-20070609/ -iname "*c"
Ultima modifica di Paoletta il lun 10 dic 2007, 14:45, modificato 1 volta in totale.
Ho provato....ma il risultato e' stato alquanto sconcertante...anycolouryoulike ha scritto:Non so se è il metodo migliore ma funziona di sicuro:Codice: Seleziona tutto
ls -R <directory>/*.c | xargs grep <stringa>
Codice: Seleziona tutto
bash-3.1# ls -R /home/zosty/ltib-imx21ads-20070609/*.c | xargs grep lcd
ls: cannot access /home/zosty/ltib-imx21ads-20070609/*.c: No such file or directory
Ed ho eseguito il comando come root
GRAZIE MILLE!!!albatros ha scritto:Questo esempio cerca nella directory corrente e nella sottodirectory i file con estensione .c nei quali cerca la stringa scanf e stampa poi il rigo con tale stringa preceduto dal nome del file (opzione -H).Codice: Seleziona tutto
find . -depth -name "*.c" -exec grep -H "scanf" {} \;
Funziona benissimo....come speravo!
- albatros
- Iper Master

- Messaggi: 2098
- Iscritto il: sab 4 feb 2006, 13:59
- Kernel: 6.18.0
- Desktop: gnome and lxqt
- Distribuzione: Ubuntu 24.04 & FC 41
- Località: Darmstadt - Germania
Prego...
Avevo aggiunto pochi minuti fa al post precedente la spiegazione del perché il tuo tentativo non funzionava, poi ho visto che ci sono stati altri interventi e ho rieditato tagliando e incollando qui di seguito:
uno (file)
due (directory)
tre.c (directory)
quattro.c (file)
è come se avessi dato: grep -R "stringa" tre.c quattro.c , per cui grep cercherà stringa in quattro.c e in *tutti* i files contenuti in tre.c, saltando però la directory due.
Avevo aggiunto pochi minuti fa al post precedente la spiegazione del perché il tuo tentativo non funzionava, poi ho visto che ci sono stati altri interventi e ho rieditato tagliando e incollando qui di seguito:
In questo caso bash espande /dir/*c nei file che finiscono per c sotto la directory dir e li passa a grep, praticamente se hai in dir:Pensavo che grep -R "stringa" /dir/*c funzionasse....
uno (file)
due (directory)
tre.c (directory)
quattro.c (file)
è come se avessi dato: grep -R "stringa" tre.c quattro.c , per cui grep cercherà stringa in quattro.c e in *tutti* i files contenuti in tre.c, saltando però la directory due.
Ultima modifica di albatros il lun 10 dic 2007, 15:09, modificato 3 volte in totale.
- anycolouryoulike
- Packager

- Messaggi: 1158
- Iscritto il: ven 10 ago 2007, 0:00
- Slackware: 12.2
- Kernel: 2.6.34.8
- Desktop: KDE 3.5.10
È vero.
Con l'opzione -R non ha senso specificare i file di una directory...
Mi correggo:Certo è molto meglio usare find come ti è stato indicato da gente molto più competente di me!
Mi correggo:
Codice: Seleziona tutto
ls -R <directory> | grep .c | xargs grep <stringa>-
Mario Vanoni
- Iper Master

- Messaggi: 3174
- Iscritto il: lun 3 set 2007, 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Quale Super-User (root):zosty ha scritto:Ho provato....ma il risultato e' stato alquanto sconcertante...anycolouryoulike ha scritto:Non so se è il metodo migliore ma funziona di sicuro:Codice: Seleziona tutto
ls -R <directory>/*.c | xargs grep <stringa>Garantisco che all'interno della dir ci sono una marea di files con estensione c....Codice: Seleziona tutto
bash-3.1# ls -R /home/zosty/ltib-imx21ads-20070609/*.c | xargs grep lcd ls: cannot access /home/zosty/ltib-imx21ads-20070609/*.c: No such file or directory
Ed ho eseguito il comando come root :(
cd directory_di_ricerca
find -name '*.c' -print | xargs -n 100 grep -n 'stringa_ricercata' | less
ti da la anche la riga dove si trova stringa_ricercata nel file trovato.
Mario Vanoni
- anycolouryoulike
- Packager

- Messaggi: 1158
- Iscritto il: ven 10 ago 2007, 0:00
- Slackware: 12.2
- Kernel: 2.6.34.8
- Desktop: KDE 3.5.10
Non è vero, manco così funziona perché ls non specifica il percorso completo dei file.anycolouryoulike ha scritto:È vero.Con l'opzione -R non ha senso specificare i file di una directory...
Mi correggo:Certo è molto meglio usare find come ti è stato indicato da gente molto più competente di me!Codice: Seleziona tutto
ls -R <directory> | grep .c | xargs grep <stringa>
- anycolouryoulike
- Packager

- Messaggi: 1158
- Iscritto il: ven 10 ago 2007, 0:00
- Slackware: 12.2
- Kernel: 2.6.34.8
- Desktop: KDE 3.5.10
Ma infatti ls seleziona i file, poi xargs li passa ad uno ad uno a grep... solo che l'output di ls non include il path completo dei file, quindi grep non li trova nel caso i file non siano nella directory corrente!
Insomma, è inutile discutere, la soluzione migliore è la tua, anche se non so nemmeno cosa servano le opzioni -depth e -H
Sarebbe interessante aprire una sezione del forum sulla Bash...
Insomma, è inutile discutere, la soluzione migliore è la tua, anche se non so nemmeno cosa servano le opzioni -depth e -H
Sarebbe interessante aprire una sezione del forum sulla Bash...
- anycolouryoulike
- Packager

- Messaggi: 1158
- Iscritto il: ven 10 ago 2007, 0:00
- Slackware: 12.2
- Kernel: 2.6.34.8
- Desktop: KDE 3.5.10
- conraid
- Staff

- Messaggi: 13631
- Iscritto il: gio 14 lug 2005, 0:00
- Nome Cognome: Corrado Franco
- Slackware: current64
- Desktop: kde
- Località: Livorno
- Contatta:
Non per fare il pignolo, ma find è un comando indipendente dalla Bash.anycolouryoulike ha scritto: Insomma, è inutile discutere, la soluzione migliore è la tua, anche se non so nemmeno cosa servano le opzioni -depth e -H
Sarebbe interessante aprire una sezione del forum sulla Bash...
Per le opzioni man find
