Вдохновленный этой задачей code-golf , я подумал, что с помощью awk будет легко достичь конечного результата. Алгоритм был бы таков: преобразовать все в нижний регистр, а затем получить только гласные в верхний регистр.
Я думал, что это может сработать
awk '{$0=tolower($0);print gensub(/[aeiou]/,toupper("&"),"g")}'
> HeLlO
> hello
, но все, что он делает, это повторяет ввод в нижнем регистре. Затем я просто начал возиться с ним:
$ awk '{$0=tolower($0);print gensub(/[aeiou]/,"&"toupper("&"),"g")}'
> HeLlO
> heelloo
Я собирался сделать вывод, что, возможно, синтаксический анализатор читал "&""&"
, поскольку awk иногда может быть очень снисходительным. Но потом я попробовал с другими функциями:
$ awk '{$0=tolower($0);print gensub(/[aeiou]/,strtonum("&"),"g")}'
> HeLlO
> h0ll0
Итак, в заключение, что мне не хватает?