Изменение регистра символов в командной строке Linux

Изменение регистра символов в командной строке LinuxПреобразование текста между прописными и строчными буквами в Linux — это как пытаться научить кота танцевать вальс: вроде бы просто, но иногда хочется выбросить клавиатуру в окно. Особенно когда нужно избежать тех коварных ошибок, которые появляются, будто из ниоткуда, и превращают ваше “Hello World” в “hELLO wORLD”. К счастью, у Linux есть волшебный арсенал команд, которые могут превратить этот кошмар в праздник.

Начнем с команды tr — это такой переводчик для букв, который берет ваш текст и говорит ему: «Эй, парень, давай-ка стань заглавным!» Например, если вы введете:

«`bash
echo Hello There | tr [:lower:] [:upper:]
«`

получите ответ громче любого караоке-бара после пятой рюмки:

«`
HELLO THERE
«`

Вот вам забавный случай из жизни: однажды мой знакомый пытался написать скрипт для отдела кадров. Он хотел все имена отделов записывать большими буквами.

В итоге написал:

«`bash
#!/bin/bash
echo -n «Enter department name: »
read dept
echo $dept | tr [:lower:] [:upper:] >> depts
«`

И тут же получил в файле список отделов, написанных так, что даже шеф задумался — не устроил ли он случайно новый отдел под названием «БЮРО ПРИКОЛОВ». А если поменять местами параметры `[:upper:]` и `[:lower:]`, то можно делать наоборот — превращать все буквы в маленькие. Это как волшебная палочка: хочешь — заглавные буквы, хочешь — строчные.

Еще один способ — команда awk.

Она похожа на того умника на вечеринке, который знает все обо всем. Вместо того чтобы просто переводить буквы по одной, awk умеет применять функции toupper и tolower.

Вот пример:

«`bash
echo $dept | awk ‘{print toupper($0)}’ >> depts
«`

А если хотите сделать наоборот — строчные буквы:

«`bash
echo $dept | awk ‘{print tolower($0)}’ >> depts
«`

Представьте себе разговор двух программистов:
— Знаешь команду tr?
— Да ладно! Я с ней на “ты”!
— А awk?
— Это уже мой босс!

Если вы думаете, что sed отстал от жизни и не умеет работать с регистрами — ошибаетесь! Этот старичок тоже может менять регистр букв с помощью магии `\U` и `\L`.

Вот как сделать весь текст заглавным:

«`bash
echo $dept | sed ‘s/[a-z]/\U&/g’ >> depts
«`

А чтобы вернуться к нижнему регистру — замените U на L:

«`bash
echo $dept | sed ‘s/[A-Z]/\L&/g’ >> depts
«`

Sed еще умеет редактировать файлы «на месте», что очень удобно. Представьте себе ситуацию: вы решили привести файл к единому стилю регистра и не хотите возиться с временными файлами. Просто запускаете:

«`bash
sed -i ‘s/[A-Z]/\L&/g’ depts
«`

И вот файл стал таким же аккуратным, как таблица умножения после урока математики.

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

Не больше и не меньше — красиво и по-деловому. Для этого sed предлагает такую штуку:

«`bash
echo design \& engineering | sed -e «s/\b\(.\)/\u\1/g»
«`

Результат? Вот он:

«`
Design & Engineering
«`

Это как если бы ваша бабушка наконец-то научилась печатать заголовки без ошибок.

Ну а если серьезно, освоение этих команд не только спасет вас от мучений с регистрами текста (которые часто приводят к тому, что ваши документы выглядят как будто их писал пьяный наборщик), но и превратит рутинную работу в увлекательное приключение по миру командной строки Linux.