So finden Sie den ersten Vokal in einer Zeichenfolge

So finden Sie den ersten Vokal in einer Zeichenfolge

Ich versuche, einen Pig-Latin-Rechner zu erstellen, hänge aber an einem bestimmten Teil fest. Nehmen wir an, ich habe die Zeichenfolge „apple“. Um diese umzuwandeln, fügen Sie einfach „way“ ans Ende an, was „appleway“ ergibt. Diesen Teil habe ich derzeit fertig.

Ich hänge an etwas wie der Zeichenfolge „sports“. Dazu nimmt man die Konsonanten vor dem ersten Vokal, hängt sie ans Ende und fügt „ay“ hinzu, wodurch man „ortsspay“ erhält.

Ich habe Probleme herauszufinden, wie ich die Konsonanten vor den ersten Vokal bekomme, um die Zeichenfolge richtig zu konvertieren.

Antwort1

Mit bashParametererweiterung:

${var%%[AaEeIiOoUu]*}
  • Das Muster entfernt [AaEeIiOoUu]*gierig ( %%) den übereinstimmenden Teil der Variablen varvon rechts, hier beginnend mit einem beliebigen Groß- oder Kleinvokal ( [AaEeIiOoUu]), gefolgt von irgendetwas ( *)

Beispiel:

$ var=sports   
$ echo "${var%%[AaEeIiOoUu]*}"
sp

$ var=foobar
$ echo "${var%%[AaEeIiOoUu]*}"
f

Antwort2

$ echo "sports" | sed 's/.*\([a-z]\)[aeiouAEIOU].*/\1/'
p

ein Platzhalter zu viel;

$ echo "spozzzzzzzzzo" | sed 's/\([a-z]\)[aeiouAEIOU].*/\1/'
sp

@Fiximan, da bin ich mir nicht sicher;

$ echo "spozzzzzzzzzo" | sed 's/\(b-df-hj-np-tv-z\{1,\}\)[aeiou].*/\1/'
spozzzzzzzzzo

@Sundeep, ja, das funktioniert ...

$ echo "spozzzzzzzzzo" | sed 's/\([^aeiou]*\).*/\1/i'
sp

Muss sagen, ich bevorzuge Heemayls, Raw Bash +1, nett!

verwandte Informationen