Иногда нужно найти файлы, содержащие определенный текст. В современный системах для рабочих станций вовсю используются утилиты из разряда 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
спасибо! :]
А как искать только в файлах определенного типа, например «.php».
На примере этой команды:
sudo grep -Hr pure-ftpd /etc/ | cut -d: -f1 | sort -u
sudo grep -Hr pure-ftpd /etc/*.php | cut -d: -f1 | sort -u
А как искать во всех файлах, кроме *.php?…
grep -v «pure-ftpd» /etc/*.php
опция -l не подойдет?
Всё никак не могу понять, как в Linux можно найти все файлы в директории содержащие строку со словами «World» и «My»….
grep -r -E ‘My.*World|World*My’ /var/log/
Вот так пишу. Что не так?