
Навигация по статье
Пока Python и другие языки только набирают обороты, Perl не сдает позиций, особенно когда речь о работе с текстом. Однострочники на Perl (one-liners) — это возможность быстро, прямо в командной строке, заменить привычные Unix-утилиты и решить кучу задач без написания длинных скриптов. Давайте покажу, как это делается и какие фишки можно выжать из пары символов кода.
Регулярные выражения вместо grep
grep уже давно стал классикой для поиска по тексту через регулярки. Но Perl настолько силён в этом, что многие приложения специально поддерживают его синтаксис. Сделать свой grep на Perl — проще простого:
Сначала разберёмся по шагам. Ключ -n говорит Perl сам обернуть ваш код в цикл по строкам файла:
-n сообщает интерпретатору Perl читать файл или ввод построчно. Оператор перебирает каждую строку, а вы пишете, что делать дальше. Всё, что заключено между //, — это ваш паттерн для поиска. За деталями советую заглянуть в официальную документацию на страницу perlrun.
Ключ -e позволяет прямо передать код, не создавая отдельный pl-файл. Благодаря этому и возможны мощные однострочные команды. Соберём свой grep на Perl и разберёмся, как он работает.
Например, хочу найти все запущенные shell-процессы — часто у них в имени встречается «sh». Для этого вывожу список процессов командой ps aux и передаю его нашему однострочнику через «|» (пайп):
Начнём с простого поиска строк, где встречается «sh»:

В результате видим все строки из вывода ps, где встречается «sh». Хотите усложнить поиск? Можно добавить условия или подобрать паттерн точнее — например, искать «s», за которым сразу идёт «h».
Проще простого искать любые комбинации с «sh» — так вы найдёте и «bash», и «zsh».
Рекомендую всю команду Perl заключать в одинарные кавычки — так bash не будет преждевременно обрабатывать спецсимволы вместо Perl. Иначе — получите ошибку.
Так как многие shell-программы заканчиваются на «sh», используйте класс символов «b» для поиска на границе слова:
Этот трюк работает не только с выводом пайпа, но и при чтении файлов напрямую.
Например, выведите все строки с «sh» из файла example.txt.
Чтобы сделать обратный поиск, как grep -v, просто используйте в Perl конструкцию unless:
Извлекаем столбцы вместо awk
awk многие используют для разбора таблиц или вывода процессов. Но Perl-однострочник с этим тоже справляется на ура.
Например, чтобы вывести имена пользователей и путь до исполняемого файла из ps aux, напишите так:

Суть: Perl сам перебирает строки, а для столбцов использует массив @F. Чтобы обратиться к нужному полю, пишите $F[номер] — отсчёт начинается с нуля. $F[0] — пользователь, $F[10] — путь к процессу (для Linux; на BSD индексы могут отличаться, проверьте по своей системе).
Фишка Perl: чтобы обращаться к переменным-массивам внутри однострочника, пишите их в двойных кавычках внутри одинарных.
Если у вас необычный разделитель — например, двоеточие, используйте ключ -F и задайте свой паттерн разделения.
Поиск и замена вместо sed
Поиск с заменой по шаблону («s/старое/новое/») знаком каждому, кто работал с sed или Vim. В Perl этот приём работает почти так же, и однострочник получается крайне лаконичным:
Работает одинаково хорошо и с пайпом, и с файлом на входе. Давайте заменим «dog» на «cat» для примера:

Попробуйте на фразе «Мне нравится гладить свою собаку» — слово «dog» заменится на «cat».
Если строка содержит сразу несколько «dog» («My dog’s breath smells like dog food»), по умолчанию Perl подменит только первое совпадение.
Чтобы заменить все вхождения — добавьте флаг «g» (от англ. global):
Теперь кошачий корм — только для кошки:

Теперь каждое «dog» меняется на «cat» в любой строке.
Сортировка вместо sort
Чтобы отсортировать список, обычно вызывают sort. На Perl всё делается одной строкой:

Эта команда отсортирует любые строки из файла или пайпа. Учтите: сортировка зависит от языковых настроек системы (locale). Например, на C.UTF-8 строки с заглавными буквами будут первыми.
Удаляем дубликаты вместо uniq
Частая задача — убрать дубликаты из списка, обычно через sort в паре с uniq. На Perl — тоже одной командой:

Фокус в том, что Perl сравнивает текущую строку с предыдущей и выводит только неповторяющееся. Переменная $_ — это текущая строка. Честно, я всё равно чаще использую uniq (он быстрее набирается!), но знать о возможностях Perl всегда полезно.
Их можно комбинировать: создавайте более сложные цепочки, например, сначала отбирайте нужные поля, а потом оставляйте только уникальные значения.
Переводим символы вместо tr
Команда tr в Linux обычно нужна, чтобы заменить отдельные символы или целые группы. Например, перевести текст в ВЕРХНИЙ РЕГИСТР одной строкой — проще простого:

Все буквы от a до z моментально станут заглавными.
И это только маленькая часть магии однострочников на Perl: практически любую задачу по обработке текста можно решить одной командой, вместо скучной пачки утилит. Perl по-прежнему жив, бодр и иногда может удивить даже опытного линуксоида!
Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!
Премиум подписка — это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!
Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь
Также подписывайтесь на нас в:
- Telegram: https://t.me/gergenshin
- Youtube: https://www.youtube.com/@gergenshin
- Яндекс Дзен: https://dzen.ru/gergen
- Официальный сайт: https://www-genshin.ru






