Какую команду Bash я могу использовать для преобразования строки в верхнем регистре в строчные и наоборот?
Спасибо.
Вы можете сделать это с помощью команды tr
.
В терминале ( Ctrl kbd> + Alt kbd> + T kbd>)
Эта команда:
echo 'String here' | tr "[:lower:]" "[:upper:]"
преобразует строчные в прописные.
echo 'STRING HERE' | tr "[:upper:]" "[:lower:]"
преобразует прописные буквы в строчные.
Пример:
Кредит поступает в кибер-город
Я бы использовал внутреннюю команду typeset или bash для определения строчной переменной.
$ typeset -l lcase
$ lcase="LoWeR cAsE"
$ echo $lcase
lower case
Символы понижаются при задании значения, а не при наборе переменной. Так что лучше набирать текст в начале скрипта. В верхнем регистре вы можете набрать typeset -u .
$ typeset -u ucase
$ ucase="Upper cAsE"
$ echo $ucase
UPPER CASE
Это не относится к оболочке bash, которая также работает с ksh, возможно, в определении оболочки POSIX.
РЕДАКТИРОВАТЬ: Многие люди мягко указали мне на тот факт, что typeset в настоящее время считается устаревшим на 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.
Я сам по-прежнему использую синтаксис набора при работе в гетерогенной среде, поэтому мне не нужно переписывать свои сценарии.
Если строка уже сохранена в переменной, вы можете использовать расширение параметра bash
, в частности ${parameter,,pattern}
(доступно после bash 4.0), где parameter
- имя вашей переменной, а pattern
опущено :
$ string="Hello, World!"
$ echo $string
Hello, World!
$ echo ${string,,}
hello, world!
Обратите внимание, что это не меняет значение переменной, только вывод. Чтобы изменить переменную, вам нужно присвоить новое значение:
$ echo $string
Hello, World!
$ string=${string,,}
$ echo $string
hello, world!
Преобразование в верхнем регистре работает с ${parameter^^pattern}
:
$ echo ${string^^}
HELLO, WORLD!
Это также работает со строками Unicode (по крайней мере, с текущими версиями bash, вероятно, требуется как минимум bash 4.3):
$ string='ἈΛΦΆβητος'
$ echo ${string,,}
ἀλφάβητος
$ echo ${string^^}
ἈΛΦΆΒΗΤΟΣ
Если вы используете zsh
, вы можете использовать Флаги расширения параметров (${(FLAGS)NAME}
; доступно начиная с zsh 2.5) для достижения тех же результатов. Синтаксис bash
не работает в zsh
1) sup>. Флаг для нижнего регистра - L
; для верхнего регистра это U
:
$ string="Hello, World!"
$ echo ${(L)string}
hello, world!
$ echo ${(U)string}
HELLO, WORLD!
$ echo $string
Hello, World!"
Это также работает со строками Unicode (по крайней мере, начиная с zsh 5.0; я не пробовал с более ранними версиями):
$ string='ἈΛΦΆβητος'
$ echo ${(L)string}
ἀλφάβητος
$ echo ${(U)string}
ἈΛΦΆΒΗΤΟΣ
< hr>
1) sup> Хотя, учитывая, что zsh имеет это гораздо дольше, вероятно, должно быть: "синтаксис zsh
не работает в [ 1118] . [одна тысяча сто двадцать восемь]
Это не чистое решение для удара, но можно передать строки по каналу через perl
(поскольку Oli сделал с sed
):
$ echo lowercase | perl -ne 'print "\U$_"'
LOWERCASE
И \L
будет иметь противоположный эффект:
$ echo UPPERCASE | perl -ne 'print "\L$_"'
uppercase
Вы также можете передать вещи через sed
:
$ echo lowercase | sed 's/.*/\U&/'
LOWERCASE
И \L
будет иметь противоположный эффект:
$ echo UPPERCASE | sed 's/.*/\L&/'
uppercase
Существует очень немного методов, которые работают правильно с Unicode:
GNU sed 4.2.2 работы:
$ echo "Idą gęsi łąką" | sed 's/.*/\U&/'
IDĄ GĘSI ŁĄKĄ
удар 4.2.45 объявляет, не работает:
$ typeset -u ucase; ucase="Idą gęsi łąką"; echo $ucase
IDą GęSI łąKą
удар 4.2.45 расширения параметра не работает:
$ str="Idą gęsi łąką"; echo ${str^^}
IDą GęSI łąKą
удар 4.3.42 declare
и работа расширения параметра:
$ declare -u ucase
$ ucase="Idą gęsi łąką"
$ echo $ucase
IDĄ GĘSI ŁĄKĄ
$ echo ${ucase,,}
idą gęsi łąką
GNU tr 8.20 не работает:
$ echo "Idą gęsi łąką" | tr '[:lower:]' '[:upper:]'
IDą GęSI łąKą
mawk (значение по умолчанию awk в Ubuntu 13.10) не работает:
$ echo "Idą gęsi łąką" | mawk '{print toupper($0)}'
IDą GęSI łąKą
работы простофили:
$ echo "Idą gęsi łąką" | gawk '{print toupper($0)}'
IDĄ GĘSI ŁĄKĄ
Perl чистый uc () не работает:
$ echo "Idą gęsi łąką" | perl -ne 'print uc($_);'
IDą GęSI łąKą
Python 2 без любых подсказок Unicode не работает:
$ echo "Idą gęsi łąką" | python -c 'import sys; print sys.stdin.read().upper(),'
IDą GęSI łąKą
Python 2 при инструктировании для контакта с работами Unicode:
$ echo "Idą gęsi łąką" | python -c 'import sys; print sys.stdin.read().decode("utf-8").upper(),'
IDĄ GĘSI ŁĄKĄ
Работы Python 3:
$ echo "Idą gęsi łąką" | python3 -c 'import sys; print(sys.stdin.read().upper(), end="")'
IDĄ GĘSI ŁĄKĄ
Используйте эту простую команду для прописных и строчных букв, где «f» - это имя файла, в который вы хотите выполнить преобразование.
tr "A-Z" "a-z" < f
Для строчных и прописных букв
tr "a-z" "A-Z" < f