Если у вас есть хоть какой-то опыт использования командной строки Linux, вы, несомненно, использовали «grep» для поиска текстовых строк, независимо от того, поступают ли они из файлов или из команд. Есть способ получше, он называется Ack.
Ack — это программа, написанная на Perl и призванная заменить почтенный старый Grep, который существует с начала 70-х годов. (Если вам интересно, grep означает «Глобальная печать регулярных выражений».)
Автор Ack, Энди Лестер, настолько уверен, что Ack лучше grep, что веб-сайт его проекта называется bestthangrep.com .
Вы можете получить его несколькими способами. Если вы обычный пользователь Perl, вы можете использовать CPAN для его установки, возможно, с помощью Перлбрю , как я описал в предыдущей статье. Cpanminus — популярный облегченный клиент CPAN. Чтобы установить Ack с его помощью, просто используйте эту команду:
cpanm App::Ack
Конечно, если вы используете Ubuntu и хотите установить ее через apt-get, вы также можете это сделать, хотя Ubuntu, как правило, отстает от последней версии разработчика. Просто используйте эту команду:
sudo apt-get install ack-grep
Вы можете использовать Ack почти так же, как и grep. Например, чтобы найти имя «maketecheasier» в файле mte.txt, просто используйте следующую команду:
ack maktecheasier mte.txt
Или вы можете перенаправить в него вывод:
cat | ack maketecheasier
Одна из основных особенностей, которую заметят новые пользователи, заключается в том, что она визуально выделяет строку поиска в результатах поиска, что означает, что вы можете точно увидеть, действительно ли вы соответствуете тому, что ищете.
Если вы выполняете поиск по сложному регулярному выражению, вы можете увидеть, что именно соответствует, а также обнаружить ложные срабатывания.
Еще одна полезная функция заключается в том, что Ack автоматически рекурсивно ищет файлы. Это означает, что Ack не только будет искать все файлы в каталоге, если вы его дадите, но и если этот каталог содержит другие каталоги, он также будет искать их, пока вы не дойдете до конца дерева каталогов. Это особенно полезно для программистов (и если вы один из них, вы, вероятно, уже знаете, что такое рекурсия), но это также очень полезно, если вы ищете шаблон в куче текстовых файлов.
Что касается программирования, вы можете сузить поиск до множества популярных языков программирования. Вот пример использования Perl:
ack --perl 'somepattern' /my/directory
Еще больше примеров вы можете найти в разделе «Типы файлов Ack» раздела документация .
Поскольку Ack написан на Perl, он автоматически совместим с регулярными выражениями Perl. Регулярные выражения – это своего рода сверхточный поиск текста, позволяющий находить очень конкретные текстовые шаблоны.
Самая лучшая и забавная функция — опция «--thpppt
», которая вызывает художественный рисунок кота Билла в формате ASCII:
_ /| \'o.O' =(___)= U ack --thppt!
<
Поскольку в Unix и Linux сравнительно легко писать программы, можно легко создавать замены обычным системным программам. Ack — один из тех, кто демонстрирует креативность сообществ Perl и Unix/Linux.