Problema regular expression+sed

Postate qui per tutte le discussioni legate a Linux in generale.

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 Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
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.
Rispondi
Avatar utente
Slack_Eater
Linux 1.x
Linux 1.x
Messaggi: 163
Iscritto il: gio 14 feb 2008, 21:29
Nome Cognome: Giuseppe Scalzi
Slackware: 13.37
Kernel: 2.6.38.2-smp
Desktop: KDE 4.7.0
Località: Svizzera
Contatta:

Problema regular expression+sed

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

sixjan
Linux 2.x
Linux 2.x
Messaggi: 413
Iscritto il: dom 6 gen 2008, 11:46
Slackware: 14.1
Kernel: 3.10.17-smp
Desktop: Xfce 4.10

Re: Problema regular expression+sed

Messaggio 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.

sixjan
Linux 2.x
Linux 2.x
Messaggi: 413
Iscritto il: dom 6 gen 2008, 11:46
Slackware: 14.1
Kernel: 3.10.17-smp
Desktop: Xfce 4.10

Re: Problema regular expression+sed

Messaggio 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

Avatar utente
Slack_Eater
Linux 1.x
Linux 1.x
Messaggi: 163
Iscritto il: gio 14 feb 2008, 21:29
Nome Cognome: Giuseppe Scalzi
Slackware: 13.37
Kernel: 2.6.38.2-smp
Desktop: KDE 4.7.0
Località: Svizzera
Contatta:

Re: Problema regular expression+sed

Messaggio 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.

sixjan
Linux 2.x
Linux 2.x
Messaggi: 413
Iscritto il: dom 6 gen 2008, 11:46
Slackware: 14.1
Kernel: 3.10.17-smp
Desktop: Xfce 4.10

Re: Problema regular expression+sed

Messaggio da sixjan »

Sì, stavo corregendo anch'io il "^". Aspettiamo spina :-)

Codice: Seleziona tutto

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

Avatar utente
anycolouryoulike
Packager
Packager
Messaggi: 1158
Iscritto il: ven 10 ago 2007, 0:00
Slackware: 12.2
Kernel: 2.6.34.8
Desktop: KDE 3.5.10

Re: Problema regular expression+sed

Messaggio 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

Avatar utente
Slack_Eater
Linux 1.x
Linux 1.x
Messaggi: 163
Iscritto il: gio 14 feb 2008, 21:29
Nome Cognome: Giuseppe Scalzi
Slackware: 13.37
Kernel: 2.6.38.2-smp
Desktop: KDE 4.7.0
Località: Svizzera
Contatta:

Re: Problema regular expression+sed

Messaggio da Slack_Eater »

Esatto.

Quello è quello che voglio fare.

Ok ora ce anche sed.

Avatar utente
anycolouryoulike
Packager
Packager
Messaggi: 1158
Iscritto il: ven 10 ago 2007, 0:00
Slackware: 12.2
Kernel: 2.6.34.8
Desktop: KDE 3.5.10

Re: Problema regular expression+sed

Messaggio 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ò.

Rispondi