
Я пытаюсь создать калькулятор на латинице, но застрял на определенной части. Допустим, у меня есть строка "apple". Чтобы преобразовать ее, вам просто нужно добавить "way" в конец, что даст вам "appleway". В настоящее время эта часть у меня готова.
Я застрял на чем-то вроде строки "sports". Для этого берешь согласные перед первой гласной, ставишь их в конец и добавляешь "ay", получая "ortsspay".
Мне сложно понять, как получить согласные перед первой гласной, чтобы правильно преобразовать строку.
решение1
С bash
расширением параметров:
${var%%[AaEeIiOoUu]*}
- Шаблон
[AaEeIiOoUu]*
жадно (%%
) удаляет совпавшую часть из переменнойvar
справа, здесь начиная с любой заглавной или строчной гласной ([AaEeIiOoUu]
), за которой следует что-либо (*
)
Пример:
$ var=sports
$ echo "${var%%[AaEeIiOoUu]*}"
sp
$ var=foobar
$ echo "${var%%[AaEeIiOoUu]*}"
f
решение2
$ echo "sports" | sed 's/.*\([a-z]\)[aeiouAEIOU].*/\1/'
p
слишком много подстановочных знаков;
$ echo "spozzzzzzzzzo" | sed 's/\([a-z]\)[aeiouAEIOU].*/\1/'
sp
@Fiximan, не уверен насчет этого;
$ echo "spozzzzzzzzzo" | sed 's/\(b-df-hj-np-tv-z\{1,\}\)[aeiou].*/\1/'
spozzzzzzzzzo
@Sundeep, да, это работает...
$ echo "spozzzzzzzzzo" | sed 's/\([^aeiou]*\).*/\1/i'
sp
Должен сказать, что я предпочитаю heemayl's, raw bash +1, здорово!