Как найти в 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/

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

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

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