- Урок 9. Поиск файлов по имени и содержимому командами grep и locate
- Как использовать команду grep в Linux
- Как использовать команду grep в Linux
- Вы знали?
- Примеры команды grep в Linux и Unix
- Синтаксис
- Как мне использовать grep для поиска файла в Linux?
- Как использовать grep рекурсивно
- Как использовать grep для поиска только слов
- Как использовать grep для поиска двух разных слов
- Игнорировать регистр
- Как я могу посчитать строку, когда слова совпали
- Вывод
- Команда Grep в Linux (Поиск текста в файлах)
- Grep Command in Linux (Find Text in Files)
- В этой статье мы покажем вам, как использовать grep команду, на практических примерах и подробных объяснениях наиболее распространенных grep опций GNU .
- grep Синтаксис команды
- Поиск строки в файлах
- Инвертировать (исключить) совпадение
- Использование Grep для фильтрации выходных данных команды
- Рекурсивный поиск
- Показывать только имя файла
- Поиск без учета регистра
- Поиск полных слов
- Показать номера строк
- Количество совпадений
- Скрытый режим
- Основное регулярное выражение
- Расширенные регулярные выражения
- Поиск по шаблону нескольких строк
- Печать строк перед сопоставлением
- Печать строк после сопоставления
- Вывод
Урок 9. Поиск файлов по имени и содержимому командами grep и locate
Очень часто нам придется использовать поиск файлов или определенного текста в файлах. Для этого в Linux есть несколько достаточно мощные утилиты.
Поиск по имени файла:
locate [опции] имя_файла
Очень быстрая утилита и позволяет искать название файла в индексируемой базе данных. Каждый день система заносит новые названия файлов в базу данных и удаляет уже неактуальные записи.
Система индексирует абсолютно все файлы либо только определенные?
Абсолютно все файлы. Однако следует учитывать, что если файл новый, а система еще не успела его проиндексировать, то команда locate его не найдет.
То есть придется ждать пока она это сделает?
Необязательно. Можно принудительно обновить базу данных с помощью команды updatedb.
А где находится эта база данных?
Здесь — /var/lib/mlocate/mlocate.db . Необходимо обладать правами root для доступа к этому файлу.
Попробуем найти файлы, в имени которого присутствует слово user. Для этого введем следующую команду:
Чтобы имя файла точно соответствовало заданному шаблону поиска достаточно ввести:
locate -b user либо locate —basename user
Для того, чтобы не учитывать регистр (то есть заглавные и прописные буквы в имени файла) достаточно ввести:
locate -i имя_файла либо locate —ignore-case имя_файла
После этого система отобразит имена файлов с заглавными и прописными буквами.
Иногда результат поиска выдает большое число записей. В данном случае можно перенаправить вывод на вход команды less .
Поиск фрагментов текста в текстовых файлах
Бывают ситуации, когда мы не знаем название файла, но знаем его содержимое. В данном случае будет полезна функция поиска файлов по его содержимому и в этом нам поможет следующая утилита:
grep [опции] шаблон файл
Для этого рассмотрим текстовый файл Linux.txt и попробуем найти слово configuration в его тексте:
grep configuration Linux.txt
Команда вывела сами строки, где встречается искомое слово.
А если текст содержит тысячи строк, то как найти эту строку в файле?
Для этого есть опция -n или —line-number.
grep -n configuration Linux.txt
Теперь у нас отображаются номера строк с искомым текстом. С помощью текстовых редакторов мы можем легко найти искомую строку, используя отображенные номера.
А можно осуществить поиск в нескольких файлах или по всей системе?
Конечно, с помощью символов групповых операций.
К примеру, у нас 4 файла, в именах которых присутствует слово manual:
Какую команду введем? Конечно же grep -n configuration *manual*.txt
Как видно сначала выводится название файла, за ним номер строки и затем сама строка с искомым словом.
Ну а если у имен этих файлов нет общих слов, то как осуществить поиск?
Достаточно ввести grep -n configuration *.
Когда используется данная комбинация, то grep ищет только в текущем каталоге! То есть вложенные каталоги не учитываются.
Чтобы учесть и вложенные подкаталоги необходимо использовать опцию -R или —dereference-recursive.
Как мы уже заметили система уже выделила красным цветом искомое слово, чтобы лучше ориентироваться. Однако не всегда система по умолчанию выделяет цветом искомое слово. Поэтому в такой ситуации используем опцию —color=auto. Выглядет это так:
grep —color=auto configuration *
Ну а если вдруг понадобится знать в каких файлах находится искомый текст и ничего больше, то воспользуемся опцией -l либо —files-with-matches:
grep -Rl configuration *
Команду grep удобно использовать и с другими командами, например ls .
Допустим мы хотим отобразить только файлы с расширением txt . Для этого выполним ls | grep —color=auto txt
Вариантов применения grep с другими командами очень много и по мере прохождения курса можно придумать довольно интересные комбинации.
Для данной команды доступны следующие опции:
-i ( —ignore-case ) — не учитывается регистр
-w ( —word-regexp ) — при поиске учитывается целое имя, то есть отображаются записи, в точности соответствующие заданному шаблону.
-v ( —invert-match ) — инвертированный поиск, то есть будут отображаться только те записи, где искомое слово отсутствует.
Источник
Как использовать команду grep в Linux
Как использовать команду grep в Linux
Команда grep используется для поиска текста. Он ищет в данном файле строки, содержащие совпадения с заданными строками или словами. Это одна из самых полезных команд в Linux и Unix-подобных системах. Давайте посмотрим, как использовать grep в Linux или Unix-подобных системах
Вы знали?
Название «grep» происходит от команды, используемой для выполнения аналогичной операции с использованием текстового редактора Unix / Linux. Ed: Утилиты grep — это семейство, которое включает в себя grep, egrep и fgrep для поиска. В большинстве случаев вам нужно использовать fgrep, поскольку он самый быстрый и просматривает только строки и слова. Однако набрать grep легко. Следовательно, это личный выбор.
g/re/p
Примеры команды grep в Linux и Unix
Ниже приведены некоторые стандартные команды grep, объясненные с примерами, которые помогут вам начать работу с grep в Linux, macOS и Unix:
- Найдите любую строку, которая содержит слово в имени файла в Linux: grep ‘word’ filename
- Выполните поиск слова ‘bar’ без учета регистра в Linux и Unix: grep -i ‘bar’ file1
- Найдите все файлы в текущем каталоге и во всех его подкаталогах в Linux по слову httpd: grep -R ‘httpd’ .
- Найдите и отобразите общее количество раз, когда строка ‘nixcraft’ появляется в файле с именем frontpage.md:: grep -c ‘nixcraft’ frontpage.md
Давайте подробно рассмотрим все команды и параметры.
Синтаксис
Синтаксис grep следующий:
grep ‘word’ filename
fgrep ‘word-to-search’ file.txt
grep ‘word’ file1 file2 file3
grep ‘string1 string2’ filename
cat otherfile | grep ‘something’
command | grep ‘something’
command option1 | grep ‘data’
grep —color ‘data’ fileName
grep [-options] pattern filename
fgrep [-options] words file
Как мне использовать grep для поиска файла в Linux?
Найдите /etc/passwd для пользователя boo, введите:
grep boo /etc/passwd
Примеры выходных данных::
Мы можем использовать fgrep/grep тобы найти все строки файла, содержащие определенное слово. Например, чтобы перечислить все строки файла с именем address.txt в текущем каталоге, которые содержат слово “California” выполните:
fgrep California address.txt
Обратите внимание, что приведенная выше команда также возвращает строки, в которых “California” является частью других слов, например “Californication” или “Californian”. Следовательно, передайте -w параметр с помощью команды grep/fgrep чтобы получить только строки, в которых “California” включено как целое слово:
fgrep -w California address.txt
Вы можете заставить grep игнорировать регистр слов, то есть сопоставить boo, Boo, BOO и все другие комбинации с -i параметром. Например, введите следующую команду:
grep -i «boo» /etc/passwd
Последнийgrep -i «boo» /etc/passwd может работать следующим образом с помощью:
cat /etc/passwd | grep -i «boo»
Как использовать grep рекурсивно
Вы можете выполнять поиск рекурсивно, т.е. читать все файлы в каждом каталоге по строке “192.168.1.5”
$ grep -r «192.168.1.5» /etc/
ИЛИ
$ grep -R «192.168.1.5» /etc/
Примеры выходных данных:
Вы увидите результат для 192.168.1.5 в отдельной строке, перед которой будет указано имя файла (например /etc/ppp/options) в котором он был найден. Включение имен файлов в выходные данные можно подавить, используя -h следующее:
$ grep -h -R «192.168.1.5» /etc/
ИЛИ
$ grep -hR «192.168.1.5» /etc/
Примеры выходных данных:
Как использовать grep для поиска только слов
Когда вы ищете boo, grep будет соответствовать fooboo, boo123, barfoo35 и другим. Вы можете заставить команду grep выбирать только те строки, содержащие совпадения, которые образуют целые слова, т.е. соответствуют только boo word:
$ grep -w «boo» file
Как использовать grep для поиска двух разных слов
Используйте команду egrep следующим образом:
$ egrep -w ‘word1|word2’ /path/to/file
Игнорировать регистр
Мы можем заставить grep игнорировать различия в регистрах в шаблонах и данных. Например, когда я ищу «bar», соответствую «BAR», «Bar», «BaR»
$ grep -i ‘bar’ /path/to/file
В этом примере я собираюсь включить все подкаталоги в поиск:
$ grep -r -i ‘main’
Как я могу посчитать строку, когда слова совпали
Команда grep может сообщить, сколько раз шаблон был сопоставлен для каждого файла, используя -c (count) опцию:
$ grep -c ‘word’ /path/to/file
Передайте -n опцию, которая должна предшествовать каждой строке вывода с номером строки в текстовом файле, из которого он был получен:
$ grep -n ‘root’ /etc/passwd
Вывод
Команда grep очень универсальна, и многие новые пользователи Linux или Unix считают ее сложной. Поэтому я предлагаю вам также прочитать справочную страницу grep . Подведем итог большинству вариантов импорта:
Источник
Команда Grep в Linux (Поиск текста в файлах)
Grep Command in Linux (Find Text in Files)
В этой статье мы покажем вам, как использовать grep команду, на практических примерах и подробных объяснениях наиболее распространенных grep опций GNU .
Команда grep означает «глобальная печать регулярных выражений», и это одна из самых мощных и часто используемых команд в Linux.
grep ищет в одном или нескольких входных файлах строки, соответствующие заданному шаблону, и записывает каждую соответствующую строку в стандартный вывод. Если файлы не указаны, grep считывает из стандартного ввода, которое обычно является выводом другой команды.
grep Синтаксис команды
Синтаксис grep команды следующий:
- OPTIONS — Ноль или более вариантов. Grep включает в себя ряд параметров, которые контролируют его поведение.
- PATTERN — Шаблон поиска.
- FILE — Ноль или более имен входных файлов.
Чтобы иметь возможность искать файл, пользователь, выполняющий команду, должен иметь доступ на чтение к файлу.
Поиск строки в файлах
Основное использование grep команды — поиск строки (текста) в файле.
Например, чтобы отобразить все строки, содержащие строку bash из /etc/passwd файла, вы должны выполнить следующую команду:
Вывод должен выглядеть примерно так:
Если строка содержит пробелы, вам необходимо заключить ее в одинарные или двойные кавычки:
Инвертировать (исключить) совпадение
Чтобы отобразить линии, которые не соответствуют шаблону, используйте параметр -v (или —invert-match ).
Например, чтобы напечатать строки, которые не содержат строку, которую nologin вы используете:
Использование Grep для фильтрации выходных данных команды
Выходные данные команды могут быть отфильтрованы с grep помощью сквозного трубопровода, и только те строки, которые соответствуют заданному шаблону, будут напечатаны на терминале.
Например, чтобы узнать, какие процессы выполняются в вашей системе как пользователь, www-data вы можете использовать следующую ps команду:
Вы также можете объединить несколько каналов в команду. Как вы можете видеть в выводе выше, есть также строка, содержащая grep процесс. Если вы не хотите, чтобы эта строка отображалась, передайте вывод другому grep экземпляру, как показано ниже.
Рекурсивный поиск
Для рекурсивного поиска шаблона, grep используйте -r опцию (или —recursive ). Когда эта опция используется, grep будет выполняться поиск по всем файлам в указанном каталоге, пропуская символические ссылки, которые встречаются рекурсивно.
Чтобы перейти по всем символическим ссылкам , вместо этого -r используйте -R опцию (или —dereference-recursive ).
Вот пример, показывающий, как искать строку baks.dev во всех файлах в /etc каталоге:
Вывод будет включать совпадающие строки с префиксом полного пути к файлу:
Если вы используете -R опцию, grep перейдите по всем символическим ссылкам:
Обратите внимание на последнюю строку вывода ниже. Эта строка не печатается, когда grep вызывается -r из-за того, что файлы в sites-enabled каталоге Nginx являются символическими ссылками на файлы конфигурации внутри sites-available каталога.
Показывать только имя файла
Чтобы подавить grep вывод по умолчанию и печатать только имена файлов, содержащих сопоставленный шаблон, используйте параметр -l (или —files-with-matches ).
Команда ниже просматривает все файлы, заканчивающиеся .conf в текущем рабочем каталоге, и печатает только имена файлов, содержащих строку baks.dev :
Вывод будет выглядеть примерно так:
-l Вариант обычно используется в сочетании с рекурсивной опции -R :
Поиск без учета регистра
По умолчанию учитывается grep регистр. Это означает, что прописные и строчные символы рассматриваются как разные.
Чтобы игнорировать регистр при поиске, grep используйте -i опцию (или —ignore-case ).
Например, при поиске Zebra без какой-либо опции следующая команда не будет отображать никаких выходных данных, т.е. есть совпадающие строки:
Но если вы выполните поиск без учета регистра, используя -i опцию, он будет соответствовать как заглавным, так и строчным буквам:
Указание «Зебра» будет соответствовать «Зебра», «ZEbrA» или любой другой комбинации прописных и строчных букв для этой строки.
Поиск полных слов
При поиске строки grep будут отображаться все строки, в которых строка встроена в более крупные строки.
Например, если вы ищете «gnu», все строки, где «gnu» встроен в более крупные слова, такие как «cygnus» или «magnum», будут совпадать:
Чтобы вернуть только те строки, в которых указанная строка представляет собой целое слово (заключенное не в словах), используйте параметр -w (или —word-regexp ).
Если вы выполните ту же команду, что и выше, включая -w опцию, grep команда вернет только те строки, которые gnu включены в качестве отдельного слова.
Показать номера строк
Опция -n (или —line-number ) указывает grep показывать номер строки, содержащей строку, которая соответствует шаблону. Когда эта опция используется, grep печатает совпадения на стандартный вывод с префиксом номера строки.
Например, чтобы отобразить строки из /etc/services файла, содержащего строку с bash префиксом с соответствующим номером строки, вы можете использовать следующую команду:
Вывод ниже показывает нам, что совпадения находятся в строках 10423 и 10424.
Количество совпадений
Чтобы напечатать количество совпадающих строк в стандартный вывод, используйте параметр -c (или —count ).
В приведенном ниже примере мы подсчитываем количество учетных записей, которые имеют /usr/bin/zsh оболочку.
Скрытый режим
-q (Или —quiet ) говорит , grep чтобы работать в скрытом режиме , чтобы не показывать ничего на стандартный вывод. Если совпадение найдено, команда завершается со статусом 0 . Это полезно при использовании grep в сценариях оболочки, где вы хотите проверить, содержит ли файл строку, и выполнить определенное действие в зависимости от результата.
Вот пример использования grep в тихом режиме в качестве команды тестирования в if инструкции :
Основное регулярное выражение
GNU Grep имеет три набора функций регулярных выражений : базовый, расширенный и Perl-совместимый.
По умолчанию grep шаблон интерпретируется как базовое регулярное выражение, где все символы, кроме метасимволов, на самом деле являются регулярными выражениями, которые соответствуют друг другу.
Ниже приведен список наиболее часто используемых метасимволов:
Используйте ^ символ (каретка), чтобы соответствовать выражению в начале строки. В следующем примере строка kangaroo будет соответствовать только в том случае, если она встречается в самом начале строки.
Используйте $ символ (доллар), чтобы соответствовать выражению в конце строки. В следующем примере строка kangaroo будет соответствовать только в том случае, если она встречается в самом конце строки.
Используйте . символ (точка), чтобы соответствовать любому отдельному символу. Например, для сопоставления всего, что начинается с kan двух символов и заканчивается строкой roo , вы можете использовать следующий шаблон:
Используйте [ ] (скобки) для соответствия любому отдельному символу, заключенному в скобки. Например, найдите строки, содержащие accept или « accent , вы можете использовать следующий шаблон:
Используется [^ ] для соответствия любому отдельному символу, не заключенному в скобки. Следующий шаблон будет соответствовать любой комбинации строк, содержащих co(any_letter_except_l)a , например coca , cobalt и так далее, но не будет совпадать со строками, содержащими cola ,
Чтобы избежать специального значения следующего символа, используйте \ символ (обратный слеш).
Расширенные регулярные выражения
Чтобы интерпретировать шаблон как расширенное регулярное выражение, используйте параметр -E (или —extended-regexp ). Расширенные регулярные выражения включают в себя все основные метасимволы, а также дополнительные метасимволы для создания более сложных и мощных шаблонов поиска. Ниже приведены некоторые примеры:
Сопоставьте и извлеките все адреса электронной почты из данного файла:
Сопоставьте и извлеките все действительные IP-адреса из данного файла:
-o Опция используется для печати только строку соответствия.
Поиск по шаблону нескольких строк
Два или более шаблонов поиска могут быть объединены с помощью оператора ИЛИ | .
По умолчанию grep шаблон интерпретируется как базовое регулярное выражение, в котором метасимволы, такие как | теряют свое особое значение, и их версии с обратной косой чертой должны использоваться.
В приведенном ниже примере мы ищем все вхождения слов fatal , error и critical в журнале Nginx файл ошибки:
Если вы используете опцию расширенного регулярного выражения -E , оператор | не должен быть экранирован, как показано ниже:
Печать строк перед сопоставлением
Чтобы напечатать определенное количество строк перед сопоставлением строк, используйте параметр -B (или —before-context ).
Например, чтобы отобразить пять строк начального контекста перед сопоставлением строк, вы должны использовать следующую команду:
Печать строк после сопоставления
Чтобы напечатать определенное количество строк после сопоставления строк, используйте параметр -A (или —after-context ).
Например, чтобы отобразить пять строк конечного контекста после сопоставления строк, вы должны использовать следующую команду:
Вывод
Команда grep позволяет искать шаблон внутри файлов. Если совпадение найдено, grep печатает строки, содержащие указанный шаблон.
На странице руководства пользователя Grep можно узнать больше о Grep .
Источник