Newsgroup: it.comp.os.linux.iniziare
Titolo: estrarre una stringa identificata con un'espressione regolare

Salve a tutti,
vorrei estrarre una stringa che risponde ad un'espressione regolare.
Ho provato ad usare gawk da uno script:
gawk '/[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]/ {print}' $1
ma invece di restituirmi solo la stringa mi restituisce tutta la riga.
Grazie per l'aiuto,
	Angelo
-- 
.ooo0
(   )	Angelo aka Ak@l
 \ (	a_c_8_0 (at) b_i_g_f_o_o_t (dot) c_o_m
  \_)	ICQ #6_3_8_3_6_1_1_9
NB: per scrivermi togli tutti i "_" dall'indirizzo

vorrei estrarre una stringa che risponde ad un'espressione regolare.
]zac[

         Angelo
{print} dice di stampare tutte le righe che contengono l'espressione
regolare che cerchi.
awk lavora per campi, quindi se la tua espressione fosse
sempre in seconda posizione, otterresti quello che vuoi con {print $2}
esempio:
$cat prova
ciao, 12/34/5678 Andrea
ciao, cc/34/5678 Filippo
ciao, 12/34/xx78 Luigi
$ gawk '/[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]/ {print $2}' prova
12/34/5678
$gawk '/[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]/ {print $1,$3}
prova
ciao, Andrea

 sempre in seconda posizione, otterresti quello che vuoi con {print $2}
vorrei evitare di dover indicare una posizione, visto che i file da
filtrare non li compongo io e non seguono sempre lo stesso identico
modello.
Cmq se awk non č adatto esiste qualcosa che si adatti meglio al mio
scopo?
Avevo pensato a sed o grep (o egrep), ma con il primo non sono riuscito
ad ottenere niente, con il secondo, con un bel:
grep -E "[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]"
ottengo ugualmente la riga intera.
Grazie per l'aiuto,
	Angelo
-- 


> > vorrei estrarre una stringa che risponde ad un'espressione
]zac[

 codice che abbia un minimo di senso.
Devo trovare una data in un file di testo, e metterla in un altro file
da cui poi la importo in mysql.
La data non è detto che all'interno del testo abbia sempre la stessa
posizione, ma è comunque l'unico elemento scritto nel formato xx/xx/xxxx


posizione, ma è comunque l'unico elemento scritto nel formato
xx/xx/xxxx
]zac[
Non sei chiaro al 100% ma e' sufficente per darti un'idea.
Con grep identifichi la riga che contiene la data poi con awk puoi
leggere le variabili $1 $2 $3 ecc. (se vuoi c'e' una variabile che
contiene il numero di campi in cui e' stata divisa la riga (di default
il separatore e' lo spazio ma volendo lo puoi cambiare)).
awk ti permette di scrivere del codice con confronti if, then, else,
ecc., quindi non devi far altro che cercare nelle varie variabili quella
che contiene il formato che cerchi e poi stamparla con print.
Come spunto: cat 'nome file' | grep 'find stringa' | awk { 'codice di
verifica'; print 'varibiabile'  } .
info awk, man awk per i dettagli.
Per qualche esempio ne puoi trovare facendo una ricerca di awk
all'interno dei file di linux.
Salve
         Dbg

 che contiene il formato che cerchi e poi stamparla con print.
A questo non avevo proprio pensato, grazie 1000
Saluti,
	Angelo


messaggio non si capisce (e c'č chi invece l'aveva capito alla prima)
]zac[
ehehe .....
Va bene non approfitto, e non ti spiatello tutti le zone oscure, i
possibili tranelli che la tua esposizione ha lasciato nell'ombra.
Comunque non te la prendere, quelli che mi conoscono mi definiscono un
rompi della 'miglior specie'.
Ti ricordo solo che in informatica a fare le cose ad occhio e' facile e
rapido, a farle per bene ci vuole sudore e rottura di sferette e tanta
precisione.
Salve
          Dbg

 rompi della 'miglior specie'.
;-)
alla prossima,


 ad ottenere niente, ....
gre non va assolutamente bene, trova solo le linee che
contengono stringhe ma non le elabora.
Col primo, se la stringa da cercare fosse XXX, si puo` dare
$ sed -n 's/^.*\(XXX\).*$/\1/p' nome-file
ossia sostituisci tutta la riga con la prima espressione racchiusa tra
parentesi(\1). I caratteri di inizio e fine riga (^ e $) sono ridondanti
(
http://www.unixguide.net/unix/sedoneliner.shtml
)
Un altro strumento ottimo per cose del genere e` il PERL,
adesso lo si usa per applicazioni web, ma il suo nome
significa proprio Linguaggio Pratico per l'Estrazione da/di
Report.
(
http://www.isinet.it/~marco/perl/
)
cioa, andrea

 (
http://www.isinet.it/~marco/perl/
)
grazie ancora,


 
Questo e` sempre positivo. :-)
Pero` se vuoi imparare un linguaggio, ti consiglio il perl.
Fa tutto quello che fanno sed e awk e parecchio in piu`,
il tutto con una relativa semplicita` :-)
Per iniziare il manuale che ti ho indicato e` veramente
ottimo.
Io, io non faccio testo. Ho imparato ad usare "ed" nella mia
lontana :( giovinezza e ora mi ritrovo senza fatica con "sed",
che ha anche il vantaggio di essere leggerissimo e sempre
reperibile.
ciao, Andrea