"greppare" più parole da un file

Postate qui per tutte le discussioni legate a Linux in generale.

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.
Rispondi
Avatar utente
absinthe
Iper Master
Iper Master
Messaggi: 2354
Iscritto il: dom 15 mag 2005, 0:00
Nome Cognome: Matteo Nunziati
Slackware: 12.1 - defunct
Kernel: 2.6.32-5-amd64
Desktop: gnome
Distribuzione: debian squeeze
Località: Prato
Contatta:

"greppare" più parole da un file

Messaggio da absinthe »

salve,

scusate il titolo un pò idiota ma non sò come definire il problema. Fondamentalmente il concetto è questo: vorrei poter estrarre da un file in /var/log/packages solo le righe conteneti bin/ e lib/. Attualmente non ho trovato niente di meglio che fare:

grep bin/ /path/to/file > list.txt
grep lib/ /path/to/file >> list.txt

ho letto le man pages ma non ci ho tratto nulla di buono.... mi domandavo se c'era modo di racchiudere tutto in unica chiamata a grep, roba tipo:

grep "bin/","lib/" /path/to/file > list.txt

oppure se era possibile impiegare un altro comando per eseguire le stesse operazioni più velocemente che con due "greppate" distinte...

grazie,
M.

PS: con velocemente intendo il tempo di esecuzione non il numero di lettere da scrivere in bash :)

pablomrg
Linux 0.x
Linux 0.x
Messaggi: 57
Iscritto il: mar 28 giu 2005, 0:00
Località: Risaie dell'alto pavese, tra nebbie e zanzare...

Messaggio da pablomrg »

Ciao,

per esaltare alla massima potenza il potere di grep, utilizzalo con le espressioni regolari.

Puoi farlo con l'opzione -e oppure utilizzando direttamente il comando egrep.

In questo modo puoi costruire una regexp che cerchi le due parole... tipo così credo:

Codice: Seleziona tutto

grep -e 'parola1|parola2' file
oppure

Codice: Seleziona tutto

egrep  'parola1|parola2' file

Avatar utente
Paoletta
Staff
Staff
Messaggi: 3975
Iscritto il: lun 25 apr 2005, 0:00
Slackware: 14.2 - 64 bit
Desktop: fluxbox
Località: Varese

Messaggio da Paoletta »

Codice: Seleziona tutto

grep "bin\|lib" gcc-3.3.6-i486-1 > ~/file
da man grep
Two regular expressions may be joined by the infix operator |; the
resulting regular expression matches any string matching either subex-
pression.

pablomrg
Linux 0.x
Linux 0.x
Messaggi: 57
Iscritto il: mar 28 giu 2005, 0:00
Località: Risaie dell'alto pavese, tra nebbie e zanzare...

Messaggio da pablomrg »

Paoletta ha scritto:da man grep
Two regular expressions may be joined by the infix operator |; the
resulting regular expression matches any string matching either subex-
pression.
quindi...
Paoletta ha scritto:

Codice: Seleziona tutto

grep "bin\|lib" gcc-3.3.6-i486-1 > ~/file
...non dovrebbe diventare...

Codice: Seleziona tutto

egrep "bin\|lib" gcc-3.3.6-i486-1 > ~/file
:?:

Avatar utente
gallows
Staff
Staff
Messaggi: 3471
Iscritto il: lun 20 set 2004, 0:00
Desktop: cwm
Distribuzione: OpenBSD
Località: ~/
Contatta:

Messaggio da gallows »

Non serve il doppio \\, ci pensano già le virgolette...

Codice: Seleziona tutto

$ egrep "lib|bin" pacchetto > ~/file

Avatar utente
Paoletta
Staff
Staff
Messaggi: 3975
Iscritto il: lun 25 apr 2005, 0:00
Slackware: 14.2 - 64 bit
Desktop: fluxbox
Località: Varese

Messaggio da Paoletta »

pablomrg ha scritto:
Paoletta ha scritto:da man grep
Two regular expressions may be joined by the infix operator |; the
resulting regular expression matches any string matching either subex-
pression.
quindi...
Paoletta ha scritto:

Codice: Seleziona tutto

grep "bin\|lib" gcc-3.3.6-i486-1 > ~/file
...non dovrebbe diventare...

Codice: Seleziona tutto

egrep "bin\|lib" gcc-3.3.6-i486-1 > ~/file
:?:
no, funziona anche così (provare per credere...)
Grep understands two different versions of regular expression syntax:
"basic" and "extended." In GNU grep, there is no difference in avail-
able functionality using either syntax.

Avatar utente
absinthe
Iper Master
Iper Master
Messaggi: 2354
Iscritto il: dom 15 mag 2005, 0:00
Nome Cognome: Matteo Nunziati
Slackware: 12.1 - defunct
Kernel: 2.6.32-5-amd64
Desktop: gnome
Distribuzione: debian squeeze
Località: Prato
Contatta:

Messaggio da absinthe »

ok sono un peerla....

le ho provate tutte tranne "bin/\|lib/" mannaggia a me.....
io son prorpio allergico a ste espressioni regolari...

grazie!!!!

pablomrg
Linux 0.x
Linux 0.x
Messaggi: 57
Iscritto il: mar 28 giu 2005, 0:00
Località: Risaie dell'alto pavese, tra nebbie e zanzare...

Messaggio da pablomrg »

Paoletta ha scritto:no, funziona anche così (provare per credere...)
Vero! :shock: :o :D

Inoltre...

Codice: Seleziona tutto

egrep  'parola1|parola2' file
...funziona, mentre...

Codice: Seleziona tutto

grep -e  'parola1|parola2' file
...non funziona! Per farlo funzionare deve diventare...

Codice: Seleziona tutto

grep -e  'parola1\|parola2' file
:roll: perdindirindina :roll:

pablomrg
Linux 0.x
Linux 0.x
Messaggi: 57
Iscritto il: mar 28 giu 2005, 0:00
Località: Risaie dell'alto pavese, tra nebbie e zanzare...

Messaggio da pablomrg »

Ok, confondevo -e con -E, sorry...
man grep ha scritto:-E, --extended-regexp
Interpret PATTERN as an extended regular expression
(see below).

-e PATTERN, --regexp=PATTERN
Use PATTERN as the pattern; useful to protect pat­
terns beginning with -.

Rispondi