Поиск текста в документах или grep в помощь

Стандартный
           

Поиск с grep

Если вы успели заметить, то я сменил дизайн сайта. Именно во время работы над изменением внешнего вида шаблона и возникла мысль написать эту статью. Я не являюсь большим знатоком в плане web-дизайна, поэтому знаю языки PHP, HTML поверхностно. А проблема заключалась в следующем, мне нужно было найти название одного графического файла, имя которого упоминалось в .php файлах темы WordPress. На помощь пришла программа grep.

Для справки — команда grep служит для поиска и фильтрации строк, которые содержат образец заданный пользователем.

Итак продолжу. Для поиска нужной части текста нужно выполнить в Терминале следующую команду:

grep -rl ‘искомая фраза’ /адрес каталога для поиска/

в итоге у меня получилась вот такая команда:

sudo grep -rl 'icy-logo' /var/www/wordpress/wp-content/themes/icy/

Sudo я добавил, потому что искать пришлось во владениях суперпользователя, ну а поиск по Домашней папке можно без sudo. Нужный файл нашелся буквально за доли секунды. А если использовать такую команду:

sudo grep -r 'icy-logo' /var/www/wordpress/wp-content/themes/icy/ --color

то в итоге мы увидим цветной вывод результата, в котором адрес документа и найденная фраза будут подсвечены каждый своим цветом.

grep

Давайте рассмотрим еще несколько примеров использования grep.
Напомню еще раз, главная область использования программы grep – поиск слов либо фраз в файлах, а также потоках вывода. Например, чтобы найти слово “height” в файле functions.php нужно использовать следующую команду:

grep height functions.php

Естественно, что вы должны открыть Терминал в той папке, в которой находится документ functions.php, если иначе, тогда нужно указать полный путь к файлу. В итоге grep покажет все вхождения слова height, которые он найдет в содержимом functions.php. Нужно знать, что в данном случае grep будет искать именно набор символов, а не слово. Поэтому будут показаны все строки, которые включают слово “height” и другие слова, в которых встречается последовательность “height” В моем случае программа вывела строку ‘flex-height’ => true,.

Чтобы указать grep, что нужно найти именно слово, нужно использовать ключ -w. Он ограничит область поиска только нужным словом. Будем искать слово primary в файле functions.php. Команда будет такой:

grep -w primary functions.php

Утилита grep может производить поиск и по группе файлов, в таком случае в результатах поиска будет указан тот файл, в котором будет обнаружено совпадение. Если добавить ключ -n, то программа укажет еще и номер строки, в которой найдет совпадение, а ключ -r даст возможность выполнить рекурсивный поиск, т.е. поиск в каталогах, подкаталогах и так далее до самых файлов. Это весьма удобно во время поиска среди файлов с исходными текстами программ. Вид команды с нужными ключами:

grep -rnw call_name /home/dm/doc/office/

Если вам нужно скрыть имена файлов, тогда воспользуйтесь ключом -h, и наоборот, если нужно вывести только имена файлов, в которых есть искомый текст, то нужно использовать ключ -l. Если использовать ключ -i, то команда будет игнорировать регистр символов из чего следует, что поиск будет производиться среди заглавных и строчных букв.

Для полной информации, про все ключи grep, выполните в Терминале:

man grep

7 Comments

  1. Мне понравилось.Отличная статья.Не большая и в то же время емкая и понятная,без лишней воды и блаблабла.Как обычно любят умничать.Напишут пару поленых именно нужных,а горую такую ерунду нагородят.Сидишь читаешь и в конце уже забыл.Чтоже я гуглил то 🙂
    А тут супер.Большое спасибо
    С уважением Давид Владимирович

  2. Отличнейший вариант. Отвечает на 90% возможных вопросов. Лаконично и предельно ясно. И форматирование грамотное 🙂 Оставшимся 10% тоже подсказано — что и где. Удачи!

  3. Автору спасибо!
    Принял на вооружение. Очень часто приходится искать текст в файлах. Думаю на этой базе написать скриптик для автоматизации поиска.

    • Насколько я знаю, то find ищет по имени файла, а grep может искать именно текст в самом файле. Чтобы быстро находило нужно просто как можно точнее указывать каталог с файлами.

Leave a Reply

Статьи