Newsgroup: it.comp.os.linux.iniziare
Titolo: Applicare comando grep&awk a molti file....

 
 
Salve a tutti
 
Ho qualche decina di file.txt, devo utilizzare grep/awk con queste decine
di file, mi sapete deire se esiste un programma, un front-end per grep che
possa applicare un singolo comando grep come: grep -v -e qualchecosa
-e un altra cosa -e ... a svariate decine di file in un solo passaggio?
I file devono mantenere il loro nome originale, non possono diventare
temp1.txt, temp2.txt, ...o almeno possono diventare anche tenp1.txt
per poi tornare ad avere il nome originale.
 
Grazie a tutti
 
Ciao
 
 
 
 
 


grep intanto accetta le wildcard. 
 
all'occorrenza puoi usare il for:
for f in temp1.txt temp2.txt; do grep [...] $f; done
 
oppure find:
 
find /dir --exec grep [...] \{\} \;
 


Per fare cosa?
 
grep pattern file1 file2 ...
 
Funziona e ti dice in quale file ha
trovato quello che cerchi.
 
Oppure serve altro?
 
bye,
 
-- 
 
piergiorgio
 


Questa è da manuale, cercavi grep more file e primo risultato:
 
https://www.google.com/search?q=grep+more+files+example
 
 
https://unix.stackexchange.com/questions/171314/how-to-grep-for-same-string-but-multiple-files-at-the-same-time
 
 
lì trovi diverse soluzioni.

Addi' 23 giu 2023 13:33:30, 
Ne...@tin.it.no
 scrive:

grep -ve qualchecosa -ve "un altra cosa" -ve pippo file1 file2.. file10
 
al posto di file1 eccetera puoi mettere "mia_dir/*" se son tutti
nella directory mia_dir ciao
(cioe' il busillis e' ripetere il "-v")
((se vuoi SOLO il nome dei file, si puo'))
 
-- 
Yoda
 

 
"Joe" <J...@e.invalid> ha scritto nel messaggio
news:u74olf$3q0og$1...@dont-email.me...

non sono esperto di grep, fino ad ora utilizzavo grep su un singolo file in 
pipe con file.temp
 
 
 
 
 
 

 pipe con file.temp
 
Proprio per questo la ricerca di cui sopra è la prima cosa da fare,
in più, se in generale posso essere d'accordo che la manpage a volte
sia un po' criptica, nel caso di grep la sintassi tra le prime righe
risponde già alla tua domanda:
-------
GREP(1)
 
NAME
       grep, egrep, fgrep - print lines that match patterns
 
       SYNOPSIS
              grep [OPTION...] PATTERNS [FILE...]
-------------------------------------------------
 
Quel [FILE...] coi puntini significa proprio che il comando può
essere applicato ad "uno o più" files.
 
 
Siccome l'esempio è spesso ciò che manca nelle manpages, e vale
più quello di mille definizioni e spiegazioni aggiungo uno spunto
"operativo". Della serie, non conosco grep e "provo a vedere come
funziona andando a naso":
----------------------
$ mkdir grep-morefiles
$ cd grep-morefiles/
 
$ echo -e 'mario rossi\npiero bianchi'
mario rossi
piero bianchi
 
$ echo -e 'mario rossi\npiero bianchi' > file1
$ echo -e 'giovanni rossi\nluana romi' > file2
 
$ cat file*
mario rossi
piero bianchi
giovanni rossi
luana romi
----------
 
Fin qui tutto liscio, si sono creati due files contentnti
delle righe, in entrambi vi è il pattern "rossi" comune,
così posso provare a grepparlo su entrambi i files e vedere
cosa salta fuori in output:
------------------------
$ grep rossi file1 file2
file1:mario rossi
file2:giovanni rossi
 
$ grep rossi file*
file1:mario rossi
file2:giovanni rossi
 
$ cat file* |grep rossi
mario rossi
giovanni rossi
--------------
 
come vedi non servono interfacce di nessun tipo, grep è
un pezzo fondamentale del mondo "unix" dalla notte dei
tempi.
L'output dei primi due tentativi non mi piace troppo, può
essere utile in certi casi, mentre in altri potrebbe essere
problematico, bisogna sempre vedere l'utilizzo che si vuol
fare della lista di righe in uscita, e il fatto che lì venga
aggiunto "nomefile:" potrebbe essere un problema se volessi
unicamente le righe così come sono nei files originali.
In modo "rapido" ci viene incontro la pipe "|": si fanno
stampare in out i files e prima di stamparlo si filtra inviandolo
in input a grep... in questo modo si ottiengono stampate solo
le righe filtrate uguali identiche alle originali presenti nei
files di partenza.
È un modo di barare rispetto alla domanda in oggetto, e forse
lo ha già fatto qualcun altro nelle altre risposte, ma scommetto
che sia possiblie ottenere lo stesso output stampato anche
senza usare cat e la pipe, direttamente con grep e qualche opzione
apposita per fare in modo che non venga aggiunto "file1:", "file2:"
ecc... a te l'onere della ricerca in tal senso!   ;)

 
ls sm*
smbprn.3h6Vlu   smbprn..B3xBH7  smbprn.F5hu1v   smbprn..LlRfPH  
........
 
[gdb@exnet samba]$ file sm*
smbprn.3h6Vlu:  empty
smbprn.3PVxWG:  empty
smbprn..A0k2CY: empty
.........
 
 
https://hangar118.sdf.org/p/bash-scripting-guide/
 
 
https://tldp.org/LDP/abs/html/
 
 
 
Il Sat, 24 Jun 2023 09:43:09 +0200, 
Ne...@tin.it.no
 ha scritto:
]zac[


 
"Joe" <J...@e.invalid> ha scritto nel messaggio
news:u76bc3$2l6i$1...@dont-email.me...

Va bene, ringrazio tutti!
 
Ciao