Как найти определенную строку или слово в файлах и каталогах
Хотите ли вы найти все файлы, содержащие определенное слово или строку текста, во всей вашей системе Linux или в определенном каталоге? В этой статье вы узнаете, как это сделать: вы узнаете, как рекурсивно копаться в каталогах, чтобы найти и составить список всех файлов, содержащих заданную текстовую строку.
Простой способ решить эту проблему — использовать инструмент поиска шаблонов grep — мощную, эффективную, надежную и самую популярную утилиту командной строки для поиска шаблонов и слов из файлов или каталогов в Unix-подобных системах.
Читайте также: 11 расширенных команд Linux ‘Grep’ для классов символов и выражений в скобках
Команда ниже выведет список всех файлов, содержащих строку с текстом «check_root», путем рекурсивного и агрессивного поиска в каталоге ~/bin
.
grep -Rw ~/bin/ -e 'check_root'
Где опция -R
указывает grep рекурсивно читать все файлы в каждом каталоге, переходя по символическим ссылкам, только если они находятся в командной строке, а опция -w< указывает ему выбирать только те строки, которые содержат совпадения, образующие целые слова, а -e
используется для указания строки (шаблона) для поиска.
Вам следует использовать команду sudo при поиске в определенных каталогах или файлах, для которых требуются права root (если вы не управляете своей системой с учетной записью root).
sudo grep -Rw / -e 'check_root'
Чтобы игнорировать различия регистров, используйте опцию -i
, как показано:
grep -Riw ~/bin/ -e 'check_root'
Если вы хотите узнать точную строку, в которой находится текстовая строка, включите опцию -n
.
grep -Rinw ~/bin/ -e 'check_root'
Предполагая, что в каталоге, в котором вы хотите выполнить поиск, есть несколько типов файлов, вы также можете указать тип файлов для поиска, например, по их расширению, используя опцию --include
.
В этом примере команда grep просматривает только все файлы .sh
.
grep -Rnw --include=\*.sh ~/bin/ -e 'check_root'
Кроме того, можно выполнить поиск более одного шаблона, используя следующую команду.
grep -Rinw ~/bin/ -e 'check_root' -e 'netstat'
Вот и все! Если вы знаете какой-либо другой прием командной строки для поиска строки или слова в файлах, поделитесь с нами или задайте какие-либо вопросы по этой теме, воспользуйтесь формой комментариев ниже.