Как использовать команду 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:

  1. Найдите любую строку, которая содержит слово в имени файла в Linux: grep 'word' filename
  2. Выполните поиск слова ‘bar’ без учета регистра в Linux и Unix: grep -i 'bar' file1
  3. Найдите все файлы в текущем каталоге и во всех его подкаталогах в Linux по слову httpd: grep -R 'httpd' .
  4. Найдите и отобразите общее количество раз, когда строка ‘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
Примеры выходных данных::

foo:x:1000:1000:boo,,,:/home/boo:/bin/ksh

Мы можем использовать 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/
Примеры выходных данных:

/etc/ppp/options:# ms-wins 192.168.1.50
/etc/ppp/options:# ms-wins 192.168.1.51
/etc/NetworkManager/system-connections/Wired connection 1:addresses1=192.168.1.5;24;192.168.1.2;

Вы увидите результат для  192.168.1.5 в отдельной строке, перед которой будет указано имя файла (например /etc/ppp/options) в котором он был найден. Включение имен файлов в выходные данные можно подавить, используя -h следующее:
$ grep -h -R "192.168.1.5" /etc/
ИЛИ
$ grep -hR "192.168.1.5" /etc/
Примеры выходных данных:

# ms-wins 192.168.1.50
# ms-wins 192.168.1.51
addresses1=192.168.1.5;24;192.168.1.2;

Как использовать 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' ~/projects/

Как я могу посчитать строку, когда слова совпали

Команда grep может сообщить, сколько раз шаблон был сопоставлен для каждого файла, используя -c (count) опцию:
$ grep -c 'word' /path/to/file
Передайте -n опцию, которая должна предшествовать каждой строке вывода с номером строки в текстовом файле, из которого он был получен:
$ grep -n 'root' /etc/passwd

1:root:x:0:0:root:/root:/bin/bash
1042:rootdoor:x:0:0:rootdoor:/home/rootdoor:/bin/csh
3319:initrootapp:x:0:0:initrootapp:/home/initroot:/bin/ksh

Вывод

Команда grep очень универсальна, и многие новые пользователи Linux или Unix считают ее сложной. Поэтому я предлагаю вам также прочитать справочную страницу grep . Подведем итог большинству вариантов импорта:

Параметры команды grep в Linux Описание
-i Игнорировать различия в регистрах в Linux и Unix
-w Заставить ШАБЛОН соответствовать только целым словам
-v Выбрать несовпадающие строки
-n Вывести номер строки с выводами
-h Отключить префикс имени файла Unix на выходе
-r Рекурсивный поиск каталогов в Linux
-R Как и -r, но следуйте всем символическим ссылкам
-l Печатать только имена ФАЙЛОВ с выделенными строками
-c Печатать только количество выбранных строк на ФАЙЛ
--color Отображение согласованного рисунка в цветах
Прокрутить вверх