Gå til innhold

Bash: 'expr', regular expression


Anbefalte innlegg

Jeg sliter med å skjønne dokumentasjonen til reg.expr. Skal bruke det sammen med bash kommandoen 'expr'. Dvs at det er litt mer escaping å ta hensyn til enn f.x. tilsvarende uttrykk i php, men ellers ganske likt.

 

Si at man har tekstene

[tilfeldig tekst] til [MOTAKER] [tilfeldig tekst]
[tilfeldig tekst] TIL [MOTAKER] [tilfeldig tekst]
[tilfeldig tekst] Til [MOTAKER] [tilfeldig tekst]
[tilfeldig tekst] Fra [MOTAKER] [tilfeldig tekst]
[tilfeldig tekst] FRA [MOTAKER] [tilfeldig tekst]
[tilfeldig tekst] fra [MOTAKER] [tilfeldig tekst]

 

Jeg skal da finne hva som står i feltet [MOTAKER]. For å gjøre det må jeg søke etter tekstene TIL eller FRA, og det kan ikke være case-sensitiv.

Det beste jeg har klart å komme opp med er

.* [tTfF][iIrR][lLaA] \(.*\) .*

Men den vil også match andre ord, som f.x. TRA, FIL, osv.

Det er altså ingen god løsning.

Noen forslag til hvordan man kan søke etter det ene ordet, eller det andre, case-insensitivt?

 

(Det er 100% sikkert at ordene TIL/FRA ikke forekommer andre steder i teksten.)

Lenke til kommentar
Videoannonse
Annonse

Det kan jo henda du har ein god grunn til å bruka expr, men det kan jo òg henda at sed er betre eigna :) Basert på det du har sagt så langt om problemstillinga, ville eg brukt noko slikt:

sed 's/.* \(til\|fra\) \([^ ]*\) .*/\2/i'

Det fungerer med alle dei tekstane du oppgav, gitt at det er eit mellomrom som skil "[MOTAKER]" frå resten av teksten på linja:

$ echo '[tilfeldig tekst] TIL [MOTAKER] [tilfeldig tekst]' | sed 's/.* \(til\|fra\) \([^ ]*\) .*/\2/i'
[MOTAKER]
$ echo '[tilfeldig tekst] Fra [MOTAKER] [tilfeldig tekst]' | sed 's/.* \(til\|fra\) \([^ ]*\) .*/\2/i'
[MOTAKER]

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...