Vinnaren i pepparkakshustävlingen!
2010-11-08, 20:17
  #1
Medlem
Hardtails avatar
Hallå allihopa,

Har nu googlat mig galen på hur jag ska lösa det problem jag står inför med grep-kommandot i Unix, nämligen hur jag i en textfil ska kunna ta ut alla de ord som innehåller två och endast två vokaler, men har inte hittat någon lösning till det. Textdokumentet är uppdelat så att det bara innehåller ett ord per rad.

Någon som vet hur jag skulle kunna göra? Har testat med flera variationer av /sw/gnu/bin/grep -E '[^eyuioåaöä][eyuioåaöä].*{2,2}' fil.txt men det fungerar ju inte så bra. Problemet är ju att vokalerna kan stå precis vart som helst i ordet, och följas av en konsonant eller inte (om den står i slutet)..

Ursäkta om frågan verkar komma från en nybörjare, för det gör den.
Citera
2010-11-08, 20:32
  #2
Medlem
franzstrudels avatar
Nu är jag också en nybörjare samt så sitter jag inte uppe med ett unix system för tillfället.
Men borde det inte fungera med grep -i ' [eyuioåaöä].*[eyuioåaöä]' fil.txt ?

Mvh
Citera
2010-11-08, 20:40
  #3
Medlem
Oj, härket
Kod:
^[^eyuioåaöä]*[eyuioåaöä][^eyuioåaöä]*[eyuioåaöä][^eyuioåaöä]*$
kan du prova att matcha. Är du säker på att ditt system behärskar åäö? Prova utan annars.
Citera
2010-11-09, 10:26
  #4
Medlem
Hardtails avatar
Citat:
Ursprungligen postat av Katalysator
Oj, härket
Kod:
^[^eyuioåaöä]*[eyuioåaöä][^eyuioåaöä]*[eyuioåaöä][^eyuioåaöä]*$
kan du prova att matcha. Är du säker på att ditt system behärskar åäö? Prova utan annars.


Jo, men det här är ju bara ett av fallen, för ett ord med två vokaler kan ju också starta med en vokal, typ som "apa".. Mönstret blir väl antingen:
  • ..V K K V..
eller..
  • ..K V V K..

Där V: vokal, K: konsonant
Citera
2010-11-09, 10:54
  #5
Medlem
Citat:
Ursprungligen postat av Hardtail
Jo, men det här är ju bara ett av fallen, för ett ord med två vokaler kan ju också starta med en vokal, typ som "apa".. Mönstret blir väl antingen:
  • ..V K K V..
eller..
  • ..K V V K..

Där V: vokal, K: konsonant

Varför skulle det inte matcha apa?

Du kan korta ner det lite såhär:
Kod:
^([^eyuioåaöä]*[eyuioåaöä]){2}[^eyuioåaöä]*$


EDIT: lite bättre förklaring:
detta matchar början av raden, sen 0 till flera tecken som inte är vokaler, sen exakt 1 vokal, sen 0 till flera tecken som inte är vokaler, sen exakt 1 vokal, sen 0 till flera tecken som inte är vokaler fram till slutet av raden.
__________________
Senast redigerad av snobbslakt 2010-11-09 kl. 11:00.
Citera
2010-11-09, 14:03
  #6
Medlem
eliras avatar
Om du inte måste använda just grep kan du prova perl:

Kod:
perl -ne 'print if @{[/[eyuioaåäö]/ig]}==2' /path/to/dinfil
Citera
2010-11-10, 18:07
  #7
Medlem
pletis avatar
Om det inte är nödvändigt med grep så är det nog lättare för alla att hjälpa till, då folk är glada i olika verktyg och håller sig till dom. Om det är en skoluppgift eller nått annat som gör att det måste vara grep så är jag tyvärr för full för att hjälpa till.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback