Преобразуйте гласные в верхний регистр в нижний регистр и нижний регистр в верхний регистр, используя sed - PullRequest
1 голос
/ 23 марта 2011

Мне нужно было бы создать скрипт, который использует sed для замены гласных в нижнем регистре гласными в верхнем регистре, а гласных в верхнем регистре гласными в любовном регистре. Например, если бы у меня была строка «This Is a LOng String», результатом должно быть «ThIs is A Long StrIng». Я пробовал что-то подобное sed 's/a/A/g ; s/A/a/g', но это не изменит a-> A и A-> a, оно заменит только строчные. Я знаю, что были похожие вопросы, но я не мог заставить их работать, поэтому я подумал, что задам вам ..

Ответы [ 4 ]

5 голосов
/ 23 марта 2011

Используйте команду sed y для транслитерации.

sed 'y/aeiouAEIOU/AEIOUaeiou/'

Подтверждение концепции

$ echo "This Is a lOng String" | sed 'y/aeiouAEIOU/AEIOUaeiou/'
ThIs is A long StrIng
3 голосов
/ 23 марта 2011

Зачем ограничивать себя в sed? Быстрый тест на моей коробке:

$ tr 'aeiouAEIOU' 'AEIOUaeiou'

работает почти в 6 раз быстрее, чем эквивалентная команда sed. (И перенаправляя вывод в сегмент битов, tr в 135 раз быстрее, вывод в конвейер - в 38,5 раза быстрее. Конечно, это тесты с единичным тестом, и они не совсем точны, но tr - правильный инструмент для этого.)

2 голосов
/ 23 марта 2011
sed 'y/aeiouAEIOU/AEIOUaeiou/'
1 голос
/ 14 августа 2014

Реализуйте это, от нижнего к верхнему:

sed 'y/aeiou/AEIOU/' inputfile.txt > outputfile.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...