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

Se avete problemi con l'installazione e la configurazione di Slackware postate qui. Non usate questo forum per argomenti generali... per quelli usate Gnu/Linux in genere.

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 Slackware, se l'argomento è generale usate il forum Gnu/Linux in genere.
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.
Avatar utente
freax
Linux 1.x
Linux 1.x
Messaggi: 177
Iscritto il: lun gen 19, 2009 0:29
Slackware: 13
Desktop: kde4

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

Messaggioda freax » sab nov 07, 2009 0:11

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 ?

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar mar 14, 2006 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce
Località: Salerno

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

Messaggioda d4z_c0nf » sab nov 07, 2009 0:26

Le regexp funzionano, magari se ci fai "lavorare" su un esempio risolviamo prima.

rock

Avatar utente
freax
Linux 1.x
Linux 1.x
Messaggi: 177
Iscritto il: lun gen 19, 2009 0:29
Slackware: 13
Desktop: kde4

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

Messaggioda freax » sab nov 07, 2009 0:30

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 ?

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar mar 14, 2006 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce
Località: Salerno

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

Messaggioda d4z_c0nf » sab nov 07, 2009 0:39

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?

Avatar utente
freax
Linux 1.x
Linux 1.x
Messaggi: 177
Iscritto il: lun gen 19, 2009 0:29
Slackware: 13
Desktop: kde4

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

Messaggioda freax » sab nov 07, 2009 0:45

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

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar mar 14, 2006 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce
Località: Salerno

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

Messaggioda d4z_c0nf » sab nov 07, 2009 0:50

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

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar mar 14, 2006 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce
Località: Salerno

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

Messaggioda d4z_c0nf » sab nov 07, 2009 0:52

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

Avatar utente
freax
Linux 1.x
Linux 1.x
Messaggi: 177
Iscritto il: lun gen 19, 2009 0:29
Slackware: 13
Desktop: kde4

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

Messaggioda freax » sab nov 07, 2009 1:20

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 .

Avatar utente
ulisse89
Packager
Packager
Messaggi: 644
Iscritto il: sab gen 17, 2009 12:53
Nome Cognome: Riccardo
Slackware: 13.0
Kernel: 2.6.29.6
Desktop: Xfce
Località: Bologna

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

Messaggioda ulisse89 » sab nov 07, 2009 8:29

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. :)

Avatar utente
freax
Linux 1.x
Linux 1.x
Messaggi: 177
Iscritto il: lun gen 19, 2009 0:29
Slackware: 13
Desktop: kde4

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

Messaggioda freax » sab nov 07, 2009 8:54

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 ... :?

Avatar utente
raffaele181188
Packager
Packager
Messaggi: 789
Iscritto il: ven set 07, 2007 21:40
Nome Cognome: Raffaele
Slackware: current
Kernel: 2.6.29.6
Desktop: KDE 4.3
Distribuzione: Ubuntu
Località: DearSkin (FG)

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

Messaggioda raffaele181188 » sab nov 07, 2009 9:28

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

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2895
Iscritto il: mer feb 13, 2008 16:19
Slackware: 14.2
Kernel: 4.4.19
Desktop: KDE4
Località: Bulagna
Contatta:

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

Messaggioda 414N » sab nov 07, 2009 10:19

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

Avatar utente
raffaele181188
Packager
Packager
Messaggi: 789
Iscritto il: ven set 07, 2007 21:40
Nome Cognome: Raffaele
Slackware: current
Kernel: 2.6.29.6
Desktop: KDE 4.3
Distribuzione: Ubuntu
Località: DearSkin (FG)

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

Messaggioda raffaele181188 » sab nov 07, 2009 10:29

414N ha scritto:cat file | sort | uniq

Buono a sapersi :D

Avatar utente
ZeD
Linux 1.x
Linux 1.x
Messaggi: 112
Iscritto il: ven ott 28, 2005 12:30
Slackware: 12.1
Località: Terra

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

Messaggioda ZeD » sab nov 07, 2009 12:18

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 :)

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2895
Iscritto il: mer feb 13, 2008 16:19
Slackware: 14.2
Kernel: 4.4.19
Desktop: KDE4
Località: Bulagna
Contatta:

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

Messaggioda 414N » sab nov 07, 2009 15:16

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 :)