Подтвердить что ты не робот

Первая буква слова с использованием SED

Как заменить первую букву слова на букву "Столица", например.

Trouble me
Gold rush brides

в

Trouble me
Gold rush brides
4b9b3361

Ответ 1

Эта строка должна это сделать:

sed -e "s/\b\(.\)/\u\1/g"

Ответ 2

Использование awk:

awk '{for(i=1;i<=NF;i++){ $i=toupper(substr($i,1,1)) substr($i,2) }}1' file

Вывод будет:

Trouble Me
Gold Rush Brides

Ответ 3

Используйте следующую команду sed для ввода заглавной буквы в каждом слове.

echo -e "Trouble me \nGold rush brides" | sed -r 's/\<./\U&/g'

выход

Trouble Me
Gold Rush Brides

Переключатель -r указывает sed использовать расширенные регулярные выражения. Инструкции к sed, то это сообщить и заменить нить поиск" (на s в начале) Узор \<. с шаблоном \U& g lobally, то есть со всеми экземплярами в каждой строке (это модификатор g в конце). Шаблон, который мы ищем, это \<. который ищет границу слова (\<), за которой следует любой символ (.). Шаблон замены - \U&, где \U предписывает sed сделать следующий текст заглавными, а & является синонимом \0, что относится к "всему, что было найдено". В данном случае "все, что было найдено" - это то, что нужно . сопоставляются, так как границы слов не включаются в совпадения (вместо этого они являются якорями). Что . matched - это всего лишь один символ, так что это верхний регистр.

Ответ 4

У меня были апострофы, поэтому, отработав первое решение...

[email protected]:~$ echo "BEST WESTERN PLUS BOB INN" | tr "[A-Z]" "[a-z]" | sed -e "s/\b\(.\)/\u\1/g"

Best Western Plus Bob Inn

[email protected]:~$ echo "BEST WESTERN PLUS BOB INN" | tr "[A-Z]" "[a-z]" | sed "s/\( \|^\)\(.\)/\1\u\2/g"

Best Western Plus Bob Inn

Ответ 5

Еще одна более короткая версия с sed:

sed -e "s/\b./\u\0/g"

Ответ 6

Я знаю, что вы сказали sed, но для сценариев оболочки одним из самых простых и гибких вариантов для меня было использование Python, доступного в большинстве систем:

$ echo "HELLO WORLD" | python3 -c "import sys; print(sys.stdin.read().title())"
Hello World

Например:

$ lorem | python3 -c "import sys; print(sys.stdin.read().title())"
Officia Est Omnis Quia. Nihil Et Voluptatem Dolor Blanditiis Sit Harum. Dolore Minima Suscipit Quaerat. Soluta Autem Explicabo Saepe. Recusandae Molestias Et Et Est Impedit Consequuntur. Voluptatum Architecto Enim Nostrum Ut Corrupti Nobis.

Вы также можете использовать такие вещи, как strip() для удаления пробелов или capitalize():

$ echo "  This iS mY USER ${USER}   " | python3 -c "import sys; print(sys.stdin.read().strip().lower().capitalize())"
This is my user jenkins

Ответ 7

Предлагаемые решения sed до сих пор будут работать только в том случае, если исходный текст написан строчными буквами. Хотя можно использовать tr '[[:upper:]]' '[[:lower:]]' для нормализации ввода в нижний регистр, может быть удобно иметь решение sed все в одном":

sed 's/\w\+/\L\u&/g'

Это будет соответствовать словам (\w означает символ слова, и \+ по крайней мере один и до следующего несловесного символа), и строчные буквы до конца (\L), но прописные буквы следующего (т.е. первого) символа (\u) в каждое (g) совпадает с выражением (&).

[ Кредиты ]

Ответ 8

Используя sed с tr:

name="athens"
echo $name | sed -r "s/^[[:alpha:]]/$(echo ${name:0:1} | tr [[:lower:]] [[:upper:]])/"

Ответ 9

если вы используете bash 4+, вы можете использовать функцию bash

#!/usr/bin/sh

NAME="andy wong"

echo ${NAME^}
echo ${NAME^^}

Output  
Andy wong  
ANDY WONG 

Ответ 10

Использование bash (без sed, так что немного не по теме):

msg="this is a message"
for word in $msg
do
   echo -n ${word^} ""
done