Pagina 1 di 1

"greppare" più parole da un file

Inviato: ven 9 dic 2005, 19:16
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 :)

Inviato: ven 9 dic 2005, 19:32
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

Inviato: ven 9 dic 2005, 19:36
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.

Inviato: ven 9 dic 2005, 20:18
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
:?:

Inviato: ven 9 dic 2005, 20:21
da gallows
Non serve il doppio \\, ci pensano già le virgolette...

Codice: Seleziona tutto

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

Inviato: ven 9 dic 2005, 20:27
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.

Inviato: ven 9 dic 2005, 20:41
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!!!!

Inviato: ven 9 dic 2005, 23:05
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:

Inviato: ven 9 dic 2005, 23:12
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 -.