Если строка уже сохранена в переменной, вы можете использовать bashрасширение параметра, в частности ${parameter,,pattern}(доступно начиная с bash 4.0), где parameterэто имя вашей переменной и patternопущено:
Если вы используете zsh, вы можете использовать флаги расширения параметров ( ${(FLAGS)NAME}доступны с zsh 2.5) для достижения тех же результатов. bashСинтаксис не работает в zsh1) . Флаг для нижнего регистра является L; для верхнего регистра это U:
Запись ${string,,}существует только для bash версии 4+. В противном случае требуется одно из других решений, например $(echo $string | tr '[:upper:]' '[:lower:]').
Куинн Комендант
40
Существует очень мало методов, которые правильно работают с Unicode:
GNU sed 4.2.2 работает :
$ echo "Idą gęsi łąką"| sed 's/.*/\U&/'
IDĄ GĘSI ŁĄKĄ
В Ubuntu 13.04 gawkпо умолчанию используется awk (как показано на рисунке update-alternatives --display awk). Вы уверены, что mawkпо умолчанию в 13.10?
Кири
seds с 1990 года поддерживают \Uопцию ;-). Не особенность гну-седа. В противном случае отличный ответ, так много вариантов, так мало времени ;-) Удачи всем!
В вашем примере, кошелек ucне работает в Perl, потому что вы должны use Encodeили use utf8. Перепишите ваш пример как echo "Idą gęsi łąką" | perl -ne 'use Encode;print encode("utf-8",uc(decode("utf-8",$_)))'и он будет работать. Также см. Stackoverflow.com/a/13261662/3701431
Сергей Колодяжный
20
Я бы использовал внутреннюю команду набора или объявления bash для определения строчной переменной.
Символы уменьшаются, когда значение установлено, а не когда вы набираете переменную. Так что лучше набирать текст в начале скрипта. В верхнем регистре вы можете набрать -u .
Это не относится к оболочке bash, которая также работает в ksh, возможно, в определении оболочки POSIX.
РЕДАКТИРОВАТЬ: Многие люди мягко указали мне на тот факт, что набор шрифтов теперь считается устаревшим на bash и заменен объявить . Обе команды эквивалентны.
$ help typeset
typeset: typeset [-aAfFgilrtux][-p] name[=value]...Set variable values and attributes.Obsolete.See`help declare'.
$ help declare
declare: declare [-aAfFgilrtux] [-p] [name[=value] ...]
Set variable values and attributes.
Я сам по-прежнему использую синтаксис набора при работе в гетерогенной среде, поэтому мне не нужно переписывать свои сценарии.
+1 Невероятно, я никогда не знал этого! Кстати, некоторая дополнительная информация: я посмотрел это в руководстве, и кажется, что typesetсчитается dericated и заменен наdeclare
thom
1
@ thom спасибо, похоже, что у bash появилась жизнь, далекая от ее «корней скорлупы борна» :)
Ответы:
Если строка уже сохранена в переменной, вы можете использовать
bash
расширение параметра, в частности${parameter,,pattern}
(доступно начиная с bash 4.0), гдеparameter
это имя вашей переменной иpattern
опущено:Обратите внимание, что это не меняет значение переменной, а только вывод. Чтобы изменить переменную, вы должны присвоить новое значение:
Преобразование в верхнем регистре работает с
${parameter^^pattern}
:Это также работает со строками Unicode (по крайней мере, с текущими версиями bash, возможно, требуется как минимум bash 4.3):
Если вы используете
zsh
, вы можете использовать флаги расширения параметров (${(FLAGS)NAME}
доступны с zsh 2.5) для достижения тех же результатов.bash
Синтаксис не работает вzsh
1) . Флаг для нижнего регистра являетсяL
; для верхнего регистра этоU
:Это также работает со строками Unicode (по крайней мере, начиная с zsh 5.0; я не пробовал с более ранними версиями):
1) Хотя, видя, что у zsh это было гораздо дольше, вероятно, должно быть: «
zsh
Синтаксис не работает вbash
.источник
${string,,}
существует только для bash версии 4+. В противном случае требуется одно из других решений, например$(echo $string | tr '[:upper:]' '[:lower:]')
.Существует очень мало методов, которые правильно работают с Unicode:
GNU sed 4.2.2 работает :
bash 4.2.45 объявить не работает:
Расширение параметра bash 4.2.45 не работает:
bash 4.3.42
declare
и расширение параметров работы :GNU tr 8.20 не работает:
mawk (по умолчанию awk в Ubuntu 13.10) не работает:
Гоук работает :
Perl pure uc () не работает:
Python 2 без подсказок Unicode не работает:
Python 2 , когда поручил разобраться с Unicode работ :
Python 3 работает :
источник
gawk
по умолчанию используется awk (как показано на рисункеupdate-alternatives --display awk
). Вы уверены, чтоmawk
по умолчанию в 13.10?sed
s с 1990 года поддерживают\U
опцию ;-). Не особенность гну-седа. В противном случае отличный ответ, так много вариантов, так мало времени ;-) Удачи всем!uc
не работает в Perl, потому что вы должныuse Encode
илиuse utf8
. Перепишите ваш пример какecho "Idą gęsi łąką" | perl -ne 'use Encode;print encode("utf-8",uc(decode("utf-8",$_)))'
и он будет работать. Также см. Stackoverflow.com/a/13261662/3701431Я бы использовал внутреннюю команду набора или объявления bash для определения строчной переменной.
Символы уменьшаются, когда значение установлено, а не когда вы набираете переменную. Так что лучше набирать текст в начале скрипта. В верхнем регистре вы можете набрать -u .
Это не относится к оболочке bash, которая также работает в ksh, возможно, в определении оболочки POSIX.
РЕДАКТИРОВАТЬ: Многие люди мягко указали мне на тот факт, что набор шрифтов теперь считается устаревшим на bash и заменен объявить . Обе команды эквивалентны.
Я сам по-прежнему использую синтаксис набора при работе в гетерогенной среде, поэтому мне не нужно переписывать свои сценарии.
источник
typeset
считается dericated и заменен наdeclare
Вы можете сделать это с помощью
tr
команды.В терминале ( Ctrl+ Alt+ T)
Эта команда:
преобразует строчные в прописные.
преобразует прописные буквы в строчные.
Пример:
Кредит идет в кибергород
источник
tr A-Z a-z
будет работать.Вы можете также передавать вещи через
sed
:И
\L
будет иметь обратный эффект:источник
Это не просто решение для bash, но вы можете передать свои строки
perl
(как это сделал Олиsed
):И
\L
будет иметь обратный эффект:источник
Используйте эту простую команду для прописных и строчных букв, где «f» - это имя файла, в который вы хотите выполнить преобразование.
Для нижнего и верхнего регистра
источник