Как использовать команду 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
Примеры выходных данных::
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 | Отображение согласованного рисунка в цветах |