Например: var=dog и echo $var выводятся как собака . Используйте заглавные буквы $var в ожидаемом выводе Dog .

Пробовал несколько способов, но не получил ожидаемого результата. Некоторые попытки:

echo $var | sed "s/[a-z]\&[:upper:]//"  #dog
echo $var | sed "s/([a-z])/[:upper:]/"  #dog
4
MrPizzaFace 25 Окт 2015 в 03:17

3 ответа

Лучший ответ

Вы можете использовать Python, если это возможно:

После ввода от разных людей (спасибо всем) это кажется хорошим рабочим решением, которое соответствует запросам OP только для первой буквы, предложенным @ PM2Ring:

Лучшее предлагаемое решение только для первого символа

bash-3.2$ var="it's an öyster's life"
bash-3.2$ python -c "import sys;print sys.argv[1].decode('utf8').capitalize()" "$var"
It's an öyster's life

Следующие решения пытаются использовать все первые символы слов в строке с заглавной буквы:

Следующее решение имеет некоторые недостатки:

bash-3.2$ python -c "print raw_input().decode('utf-8').title()" <<<"it's an öyster's life" 
It'S An Öyster'S Life

Простое решение с использованием переменной:

bash-3.2$ var='dog is dog'
bash-3.2$ python -c "print raw_input().decode('utf-8').title()" <<<"$var"
Dog Is Dog

Как видно из комментариев в этом ответе (спасибо за ввод), важно отметить ограничения его использования, особенно с использованием собственного языка Python 2.7 для OSX.

Пример 1: (Спасибо @ john1024 & @ dev-null)

Проблемы с цитатой.

Небольшая модификация с кавычками, необходимая для обработки примера строки ниже

var="it's a dog's life"
bash-3.2$ python -c "print '$var'.title()"
It'S A Dog'S Life

Дополнительный пример, который не работает с моим решением: var="hello ''' world"

Пример 2: (Спасибо @ mklement0)

Проблемы с Unicode

bash-3.2$ var='öyster'
bash-3.2$ python -c "print '$var'.title()"
öYster

Обратите внимание, что вторая буква написана с заглавной буквы, которая является первым символом ascii, который метод title будет использовать с заглавной буквы в зависимости от того, как это ожидается в Python2.

Следующая модификация решения может быть сделана, чтобы помочь с символами Юникода:

bash-3.2$ var='öyster'
python -c "print '$var'.decode('utf-8').title()" 
Öyster

Наконец, когда мы собираем решения из приведенного ниже обсуждения, вот как они были собраны, чтобы наконец получить:

python -c "print raw_input().decode('utf-8').title()" <<<"it's an öyster's life" 
4
idjaw 25 Окт 2015 в 11:28

Если вы хотите работать с Unicode, рассмотрите возможность использования perl:

$ perl -lne 'use open qw(:std :utf8); print ucfirst' <<< 'dog'
Dog
$ perl -lne 'use open qw(:std :utf8); print ucfirst' <<< 'élan'
Élan

Как указано в комментариях:

$ perl -C -lne 'print ucfirst' <<< 'élan'
Élan
2
dawg 25 Окт 2015 в 03:48
var="hello world"
echo "$var" | awk '{print toupper(substr($0, 1, 1)) substr($0, 2)}' # Hello world

И если вы хотите использовать каждое слово с большой буквы:

var="hello world"
echo "$var" | awk 'BEGIN{RS = " "};{printf("%s ", toupper(substr($0, 1, 1)) substr($0, 2))}' # Hello World
4
andlrc 25 Окт 2015 в 01:25