Использование GNU sed
, (и bash
):
F="my name is user from here not there."
sed -E 's/^./\u&/;s/([[:space:]])([[:alpha:]]{4})/\1\u\2/g' \
<<< "${F,,}"
или
sed -E 's/^./\u&/;s/(\s)(\w{4})/\1\u\2/g' <<< "${F,,}"
Выход:
My Name is User From Here not There.
Примечания:
"${F,,}"
- это расширение параметра модификации регистра bash
, возвращает строчную версию $F
, которая становится входом для sed
.
GNU sed
предлагает некоторые полезные синонимы и сокращения для обычных regex классов символов. Класс символов [a-zA-Z0-9_]
может быть сокращен до [[:alpha:]_]
или еще проще \w
.
Хотя \u
выглядит как регулярное выражение , это не так. Это «особая последовательность» , используемая только в s
ubstitute текст замены команды - \u
означает «перевод следующего символа в верхний регистр» .
&
относится к любому первому регулярному выражению в команде s
ubstitute . Сравните следующее:
sed 's/./&/' <<< foo # outputs "f"
sed 's/./&/g' <<< foo # outputs "foo"
sed 's/./&&&&/g' <<< foo # outputs "ffffoooooooo"
sed 's/./\u&&&\u&/g' <<< foo # outputs "FffFOooOOooO"
sed 's/.*/&&&&/' <<< foo # outputs "foofoofoofoo"
Подробнее см. GNU sed
info страницы .