Преобразование текста между прописными и строчными буквами в 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.