Pagina 1 di 3

Espressioni regolari con la bash/shell molto ... irregolari

Inviato: sab 7 nov 2009, 0:11
da freax
salve gente , grep , egrep e fgrep supportano le espressioni regolari ? dovrebbero giusto ? almeno uno di questi 3 comandi dovrebbe ?

la mia esigenza nasce dall'avere una pagina web e dal fatto che devo tirarne fuori i link che contiene o link con contenuto specifico come domini , nomi , etc etc , ok fin qui ?

salvo la pagina per fare una prova in locale e testo la regex che non ne vuole sapere di andare ne con grep , ne con egrep , ne con fgrep , ne con una pipe ( con cat pagina.html ad esempio )

ho letto che alcune distro hanno un buon supporto alle regex altre meno , addirittura ci sarebbe differenza sull'escape dei caratteri , il bello è che tutto questo l'ho racimolato e messo insieme da post di mezza riga quindi non proprio documentati alla perfezione : qualcuno mi illumina sulle regex e sulla bash di Slackware 13 ? Documentazione sulla sintassi ?

Re: Espressioni regolari con la bash/shell molto ... irregolari

Inviato: sab 7 nov 2009, 0:26
da d4z_c0nf
Le regexp funzionano, magari se ci fai "lavorare" su un esempio risolviamo prima.

rock

Re: Espressioni regolari con la bash/shell molto ... irregolari

Inviato: sab 7 nov 2009, 0:30
da freax
d4z_c0nf ha scritto:Le regexp funzionano, magari se ci fai "lavorare" su un esempio risolviamo prima.

rock
ecco una bella mezza notizia , l'altra mezza è : come ?

ovviamente quando dalla shell esamino una pagina web il codice html non viene interpretato quindi io vedo il sorgente della pagina , ok ? ecco una regex che ad esempio mi trova tutti i link di megaupload

Codice: Seleziona tutto

http://www\.megaupload\.com/.{0,3}\?d=[a-zA-Z0-9]{8}
provata sul desktop e va , perché da console no ?

Re: Espressioni regolari con la bash/shell molto ... irregolari

Inviato: sab 7 nov 2009, 0:39
da d4z_c0nf
freax ha scritto:
d4z_c0nf ha scritto:Le regexp funzionano, magari se ci fai "lavorare" su un esempio risolviamo prima.

rock
ecco una bella mezza notizia , l'altra mezza è : come ?

ovviamente quando dalla shell esamino una pagina web il codice html non viene interpretato quindi io vedo il sorgente della pagina , ok ? ecco una regex che ad esempio mi trova tutti i link di megaupload

Codice: Seleziona tutto

http://www\.megaupload\.com/.{0,3}\?d=[a-zA-Z0-9]{8}
provata sul desktop e va , perché da console no ?
In pratica tu vuoi matchare tutti i link di quel tipo presenti in una o più pagine web giusto?

Re: Espressioni regolari con la bash/shell molto ... irregolari

Inviato: sab 7 nov 2009, 0:45
da freax
d4z_c0nf ha scritto:
freax ha scritto:
d4z_c0nf ha scritto:Le regexp funzionano, magari se ci fai "lavorare" su un esempio risolviamo prima.

rock
ecco una bella mezza notizia , l'altra mezza è : come ?

ovviamente quando dalla shell esamino una pagina web il codice html non viene interpretato quindi io vedo il sorgente della pagina , ok ? ecco una regex che ad esempio mi trova tutti i link di megaupload

Codice: Seleziona tutto

http://www\.megaupload\.com/.{0,3}\?d=[a-zA-Z0-9]{8}
provata sul desktop e va , perché da console no ?
In pratica tu vuoi matchare tutti i link di quel tipo presenti in una o più pagine web giusto?
yes , però volevo cogliere l'occasione per rispolverare le regex , comunque si , il succo è quello anche se dopo la regex veniva la parte nella quale controllavo se ci fossero doppioni nell'output visto che a volte sia il link alla pagina sia il nome del link hanno la forma http://www.etcetc.it

Re: Espressioni regolari con la bash/shell molto ... irregolari

Inviato: sab 7 nov 2009, 0:50
da d4z_c0nf
Non ho capito bene poi il fatto della prova sul desktop..
In ogni caso ho fatto questa prova:
Ho un file pippo.htm:

Codice: Seleziona tutto

http://www.megaupload.com/?d=R37IFLY1
dffhttp://www.megaupload.com/?d=R37IFLY2
gfdlgk http://www.megaupload.com/?d=R37IFLY3 
fdsaf
http://www.megaupload.com/?d=R37IFLY4
Scusa la rozzezza ma è per velocità.
Do il comando:

Codice: Seleziona tutto

egrep -o 'http://www\.megaupload\.com/.{0,3}\?d=[a-zA-Z0-9]{8}' ./pippo.html
e il risultato è coerentemente:

Codice: Seleziona tutto

http://www.megaupload.com/?d=R37IFLY1
http://www.megaupload.com/?d=R37IFLY2
http://www.megaupload.com/?d=R37IFLY3
http://www.megaupload.com/?d=R37IFLY4

Re: Espressioni regolari con la bash/shell molto ... irregolari

Inviato: sab 7 nov 2009, 0:52
da d4z_c0nf
freax ha scritto:[
yes , però volevo cogliere l'occasione per rispolverare le regex , comunque si , il succo è quello anche se dopo la regex veniva la parte nella quale controllavo se ci fossero doppioni nell'output visto che a volte sia il link alla pagina sia il nome del link hanno la forma http://www.etcetc.it
Ma le regex le usi correttamente in quella stringa.
Forse usavi male i comandi. Per questo dovresti leggerti un po' i man o gl'help.

rock

Re: Espressioni regolari con la bash/shell molto ... irregolari

Inviato: sab 7 nov 2009, 1:20
da freax
d4z_c0nf ha scritto:
freax ha scritto:[
yes , però volevo cogliere l'occasione per rispolverare le regex , comunque si , il succo è quello anche se dopo la regex veniva la parte nella quale controllavo se ci fossero doppioni nell'output visto che a volte sia il link alla pagina sia il nome del link hanno la forma http://www.etcetc.it
Ma le regex le usi correttamente in quella stringa.
Forse usavi male i comandi. Per questo dovresti leggerti un po' i man o gl'help.

rock
ok perfetto , tra grep -E come egrep ho fatto un bel po di casino ... qualche idea su come togliere i duplicati ? l'ordine dell'elenco deve rimanere invariato .

Re: Espressioni regolari con la bash/shell molto ... irregolari

Inviato: sab 7 nov 2009, 8:29
da ulisse89
Comunque ricordo di aver ricompilato il programma "urlview" che fa proprio al caso tuo. Estrae gli URL dai file. E' un peccato che sia scritto in C e quindi non possa darti un esempio di come potevi usare *grep. :)

Re: Espressioni regolari con la bash/shell molto ... irregolari

Inviato: sab 7 nov 2009, 8:54
da freax
ulisse89 ha scritto:Comunque ricordo di aver ricompilato il programma "urlview" che fa proprio al caso tuo. Estrae gli URL dai file. E' un peccato che sia scritto in C e quindi non possa darti un esempio di come potevi usare *grep. :)
quella parte del lavoro è andata comunque , ah se questo urlview avesse avuto il controllo sui duplicati .

devo risolvere questa cosa dei link duplicati anche se la cosa più rapida rimane il salvataggio tramite un frontend web e da li incollo il testo o lo controllo a manina ... :?

Re: Espressioni regolari con la bash/shell molto ... irregolari

Inviato: sab 7 nov 2009, 9:28
da raffaele181188
Ma tu per duplicati ora cosa intendi? Se intendi che alcune stringhe vengono matchate più volte, beh, allora devi modificare il comando e passare delle opzioni a seconda del caso. Se invece intendi eliminare tutte le istanze di un URL che si ripetono in un documento meno una, allora sei costretto a usare un linguaggio di programmazione, e io ti consiglio un linguaggio di alto livello con supporto ai contenitori senza duplicati (io conosco Java e Python per questo scopo)

Offtopic: Per ricevere un aiuto buono e rapido, l'approccio migliore è senza dubbio spiegare tutto, per bene, e nel primo post :D

Re: Espressioni regolari con la bash/shell molto ... irregolari

Inviato: sab 7 nov 2009, 10:19
da 414N
Per rimuovere i duplicati da un file (intendo righe uguali) si usa uniq, in combinazione con sort (le righe duplicate devono essere adiacenti):

Codice: Seleziona tutto

cat file | sort | uniq

Re: Espressioni regolari con la bash/shell molto ... irregolari

Inviato: sab 7 nov 2009, 10:29
da raffaele181188
414N ha scritto: cat file | sort | uniq
Buono a sapersi :D

Re: Espressioni regolari con la bash/shell molto ... irregolari

Inviato: sab 7 nov 2009, 12:18
da ZeD
raffaele181188 ha scritto:
414N ha scritto: cat file | sort | uniq
Buono a sapersi :D
per la cronaca,

Codice: Seleziona tutto

sort -u file
è più che sufficiente :)

Re: Espressioni regolari con la bash/shell molto ... irregolari

Inviato: sab 7 nov 2009, 15:16
da 414N
ZeD ha scritto:
raffaele181188 ha scritto:
414N ha scritto: cat file | sort | uniq
Buono a sapersi :D
per la cronaca,

Codice: Seleziona tutto

sort -u file
è più che sufficiente :)
Maial, è vero! Grazie :)