Pagina 1 di 1

Problema regular expression+sed

Inviato: mar 21 apr 2009, 11:13
da Slack_Eater
Ciao a tutti,

ho un problema con un espressione regolare. In pratica dovrei estrarre dal file che trovate qui sotto solo la dicitura "rsti" seguita da 4 numeri. Il file cambia sempre, contenendo sempre però rsti seguita sempre da 4 numeri.

Codice: Seleziona tutto

SANVIDAN rsti9101
SANVIDAN rsti0223
rsti0053
34rtsi0004
iiiiiirsti0005
rsti0006rskj
rsti0007 oioioip
rsti0008
rsti0009qqwq
rsti0010
djfhdkjhkrsti0011
00rsti0012
rsti0013
Ho provato utilizzando questa:

Codice: Seleziona tutto

sed 's/[^\<rsti\>0-9]//g'
Ma mi ritorna le lettere i,r,t,s anche non come parola unica e altri numeri non per forza dopo la parola rsti.

Codice: Seleziona tutto

rsti9101
rsti0223
rsti0053
34rsti0004
iiiiiirsti0005
rsti0006rs
rsti0007iii
rsti0008
rsti0009
rsti0010
rsti0011
00rsti0012
rsti0013
C'è un modo per ottenere solo rsti[0-9]{4} senza altre lettere "singole" o numeri prima?

Grazie 8)

Re: Problema regular expression+sed

Inviato: mar 21 apr 2009, 11:40
da sixjan
In attesa che spina ti risponda su sed, si può fare con grep:

Codice: Seleziona tutto

grep -o ^rsti[0-9][0-9][0-9][0-9]
Ciao

EDIT: o così:

Codice: Seleziona tutto

grep  -o "^rsti[0-9]\{4\}"
EDIT: NO! ho sbagliato. Così mette dentro anche quelle con le lettere finali.

Re: Problema regular expression+sed

Inviato: mar 21 apr 2009, 11:55
da sixjan
Ok. Questo dovrebbe andare:

Codice: Seleziona tutto

grep  -ow "^rsti[0-9]\{4\}"
sulla lista che hai proposto ritorna:
  • rsti0053
    rsti0007
    rsti0008
    rsti0010
    rsti0013

Re: Problema regular expression+sed

Inviato: mar 21 apr 2009, 11:59
da Slack_Eater
Ok grazie sixjan,

ho tolto il carattere ^ che non mi visualizzava le linee che non cominciano con rsti.

In ogni caso funziona, mi va bene usare anche grep. Vederlo anche con sed non sarebbe male dunque aspetto ma i miei dubbi sono risolti.

Re: Problema regular expression+sed

Inviato: mar 21 apr 2009, 12:02
da sixjan
Sì, stavo corregendo anch'io il "^". Aspettiamo spina :-)

Codice: Seleziona tutto

grep  -ow "rsti[0-9]\{4\}"

Re: Problema regular expression+sed

Inviato: mar 21 apr 2009, 13:19
da anycolouryoulike
Ma è questo che vuoi fare?

Codice: Seleziona tutto

$ sed -n 's/.*\(rsti[0-9]\{4\}\).*/\1/gp' prova
rsti9101
rsti0223
rsti0053
rsti0005
rsti0006
rsti0007
rsti0008
rsti0009
rsti0010
rsti0011
rsti0012
rsti0013

Re: Problema regular expression+sed

Inviato: mar 21 apr 2009, 13:24
da Slack_Eater
Esatto.

Quello è quello che voglio fare.

Ok ora ce anche sed.

Re: Problema regular expression+sed

Inviato: mar 21 apr 2009, 15:34
da anycolouryoulike
Dovrebbe funzionare anche 's/[^\<rsti[0-9]\{4\}\>]//g', ma evidentemente le parentesi angolari perdono significato dentro quelle quadre. O forse non si possono nidificare quelle quadre?
Peccato però.