Как найти в Linux файлы, содержащие текст

Иногда нужно найти файлы, содержащие определенный текст. В современный системах для рабочих станций вовсю используются утилиты из разряда Desctop Search, которые индексируют все документы и затем предоставляют возможность быстро найти искомый файл. В Linux сервере для этого можно использовать команду grep.

Содержание

Используем grep для поиска текста

grep “text string” directory

При выполнении данной команды grep будет искать строку text string во всех файлах в директории directory

Примеры использования grep

$ grep "redeem reward" /home/tom/*.txt

Как найти текст во всех подкаталогах

grep позволяет искать в подкаталогах, используя опцию -r:

$ grep -r "redeem reward" /home/tom

Вывести только имена найденных grep файлов

Чтобы grep вывела имена найденных файлов, стоит использовать опцию -H.

sudo grep -Hr pure-ftpd /etc/

Вывод:

...
/etc/rc2.d/S20pure-ftpd:# Provides: pure-ftpd
/etc/rc2.d/S20pure-ftpd:# pure-ftpd starts and stops the pure-ftpd ftp daemon
/etc/rc2.d/S20pure-ftpd:NAME=pure-ftpd
/etc/rc2.d/S20pure-ftpd:WRAPPER=/usr/sbin/pure-ftpd-wrapper
/etc/rc2.d/S20pure-ftpd:PIDFILE=/var/run/pure-ftpd/pure-ftpd.pid
/etc/rc2.d/S20pure-ftpd:SUFFIX=`basename $ME | sed -ne 's/^pure-ftpd-\(.*\)/\1/p'`
/etc/rc2.d/S20pure-ftpd: DAEMON=/usr/sbin/pure-ftpd-$SUFFIX
...

Теперь нужно прогнать вывод через фильтр, чтобы оставить только имена файлов, в которых есть вхождение текста, а также удалить дубликаты. Нужно использовать такую команду:

sudo grep -Hr pure-ftpd /etc/ | cut -d: -f1 | sort -u

Вывод:

grep: /etc/blkid.tab: No such file or directory
/etc/default/pure-ftpd-common
/etc/ftpallow
/etc/init.d/pure-ftpd
/etc/logrotate.d/pure-ftpd-common
/etc/pam.d/pure-ftpd
/etc/pure-ftpd/conf/AltLog
/etc/pure-ftpd/conf/PureDB
/etc/rc0.d/K20pure-ftpd
/etc/rc1.d/K20pure-ftpd
/etc/rc2.d/S20pure-ftpd
/etc/rc3.d/S20pure-ftpd
/etc/rc4.d/S20pure-ftpd
/etc/rc5.d/S20pure-ftpd
/etc/rc6.d/K20pure-ftpd

Как найти в Linux файлы, содержащие текст: 7 комментариев

  1. А как искать только в файлах определенного типа, например «.php».

    На примере этой команды:
    sudo grep -Hr pure-ftpd /etc/ | cut -d: -f1 | sort -u

  2. Всё никак не могу понять, как в Linux можно найти все файлы в директории содержащие строку со словами «World» и «My»….

    grep -r -E ‘My.*World|World*My’ /var/log/

    Вот так пишу. Что не так?

Добавить комментарий

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