zaLinux.ru

Как преобразовать строку в нижний регистр в Bash


В этой заметке будет показано, как преобразовать строку в нижний регистр (строчные буквы) в командной строке Linux.

Чтобы конвертировать строку в маленькие буквы независимо от её текущего регистра, используйте одну из следующих команд.

tr

echo "Hi all" | tr '[:upper:]' '[:lower:]'
hi all

Внимание! Если вы хотите изменить регистр каких-либо букв кроме латиницы (национальные алфавиты, буквы с диакритическими знаками), то не используйте tr, а используйте любое другое решение, предложенное далее. Это связано с тем, что классическая Unix tr оперирует символами однобайтовой кодировки и не совместима с Unicode.

AWK

echo "Hi all" | awk '{print tolower($0)}'
hi all


Bash

a="Hi all"
echo "${a,,}"
hi all

Начиная с Bash 5.1 имеется параметр преобразования L, который предназначен для перевода строки в нижний регистр:

${var@L}

Пример:

v="heLLo"
echo "${v@L}"
hello

sed

echo "Hi all" | sed -e 's/\(.*\)/\L\1/'
hi all

Либо такой вариант:

echo "Hi all" | sed -e 's/\(.*\)/\L\1/' <<< "$a"
hi all

Ещё один вариант:

echo "Hi all" | sed 's/./\L&/g'

Perl

echo "Hi all" | perl -ne 'print lc'
hi all

Python

a="Hi all"
b=`echo "print ('$a'.lower())" | python`; echo $b

Ruby

a="Hi all"
b=`echo "print '$a'.downcase" | ruby`; echo $b

PHP

b=`php -r "print strtolower('$a');"`; echo $b

NodeJS

b=`node -p "\"$a\".toLowerCase()"`; echo $b

Оболочка zsh

a="Hi all"
echo $a:l

Рекомендуемые статьи:

2 Комментарии

  1. redking

    кстати, обычный tr  для данной задачи плохо работает с кирилицей

    $ echo Привет МИР | tr '[:upper:]' '[:lower:]'
    Привет МИР

     

    wiki

    Most versions of tr, including GNU tr and classic Unix tr, operate on single-byte characters and are not Unicode compliant. An exception is the Heirloom Toolchest implementation, which provides basic Unicode support.

    1. Alexey (Автор записи)

      Приветствую! Спасибо за очень важное дополнение. Я добавил предупреждение в статью.

Оставить комментарий

Ваш адрес email не будет опубликован.