Команда Linux grep

Linux 命令大全Энциклопедия команд Linux

Команда Linux grep (глобальное регулярное выражение) используется для поиска строк или регулярных выражений, соответствующих критериям, в файлах.

Команда grep используется для поиска файлов, содержимое которых содержит заданный шаблон. Если содержимое файла соответствует заданному шаблону, по умолчанию команда grep отобразит строку, содержащую этот шаблон. Если имя файла не указано или если заданное имя файла-, то команда grep будет считывать данные из стандартного устройства ввода.

Синтаксис

grep [options] pattern [files]
или 
grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
  • pattern — указывает строку или регулярное выражение для поиска.
  • files — указывает имена файлов для поиска; можно искать несколько файлов одновременно. Если параметр files опущен, по умолчанию данные считываются со стандартного ввода.

Общие параметры::

  • -i: Игнорировать регистр при сопоставлении.
  • -v: Обратный поиск, выводить только строки, которые не совпадают.
  • -n: Показывать номера совпадающих строк.
  • -r: Рекурсивно искать файлы в подкаталогах.
  • -l: Выводить только имена совпадающих файлов.
  • -c: Выводить только количество совпадающих строк.

Дополнительные описания параметров:

  • -a или --text: Не игнорировать двоичные данные.
  • -A<количество отображаемых строк> или --after-context=<количество отображаемых строк>: В дополнение к отображению строки, совпадающей с шаблоном, также отображать содержимое после этой строки.
  • -b или --byte-offset: Перед отображением строки, совпадающей с шаблоном, указывать номер первого символа в этой строке.
  • -B<количество отображаемых строк> или --before-context=<количество отображаемых строк>: В дополнение к отображению строки, совпадающей с шаблоном, также отображать содержимое перед этой строкой.
  • -c или --count: Подсчитывать количество строк, совпадающих с шаблоном.
  • -C<количество отображаемых строк> или --context=<количество отображаемых строк> или -<количество отображаемых строк>: В дополнение к отображению строки, совпадающей с шаблоном, также отображать содержимое до и после этой строки.
  • -d <action> или --directories=<action>: Если указанная цель поиска является каталогом, а не файлом, необходимо использовать этот параметр; в противном случае команда grep выдаст сообщение и остановится.
  • -e<pattern> или --regexp=<pattern>: Укажите строку в качестве шаблона для поиска содержимого файлов.
  • -E или --extended-regexp: Рассматривать шаблон как расширенное регулярное выражение.
  • -f<rule file> или --file=<rule file>: Укажите файл правил, содержимое которого содержит один или несколько шаблонов правил, позволяя grep искать содержимое файлов, удовлетворяющее критериям правил. Формат: один шаблон правила на строку.
  • -F или --fixed-regexp: Рассматривать шаблон как список фиксированных строк.
  • -G или --basic-regexp: Рассматривать шаблон как обычное регулярное выражение.
  • -h или --no-filename: Перед отображением строки, соответствующей шаблону, не указывать имя файла, которому принадлежит эта строка.
  • -H или --with-filename: Перед отображением строки, соответствующей шаблону, указывать имя файла, которому принадлежит эта строка.
  • -i или --ignore-case: Игнорировать различия в регистре символов.
  • -l или --file-with-matches: Вывести имена файлов, содержимое которых соответствует указанному шаблону.
  • -L или --files-without-match: Вывести имена файлов, содержимое которых не соответствует указанному шаблону.
  • -n или --line-number: Перед отображением строки, соответствующей шаблону, указывать номер этой строки.
  • -o или --only-matching: Отображать только часть, соответствующую PATTERN.
  • -q или --quiet или --silent: Не выводить никакой информации.
  • -r или --recursive: Этот параметр имеет тот же эффект, что и указание параметра "-d recurse".
  • -s или --no-messages: Не выводить сообщения об ошибках.
  • -v или --invert-match: Выводить все строки, которые не содержат совпадающий текст.
  • -V или --version: Показать информацию о версии.
  • -w или --word-regexp: Отображать только строки, совпадающие с целыми словами.
  • -x --line-regexp: Отображать только строки, совпадающие со всей строкой.
  • -y : Этот параметр имеет тот же эффект, что и указание параметра "-i".

Linux 命令大全Энциклопедия команд Linux

Примеры

1. Найти строку "hello" в файле file.txt и вывести совпадающие строки:

grep hello file.txt

2. Рекурсивно искать во всех файлах каталога dir строки, соответствующие регулярному выражению "pattern", и вывести имена файлов и номера строк совпадающих строк:

grep -r -n pattern dir/

3. Найти строку "world" в стандартном вводе и вывести только количество совпадающих строк:

echo "hello world" | grep -c world

4. В текущем каталоге найдите среди файлов, имена которых имеют суффикс "file", файлы, содержащие строку "test", и выведите строки, содержащие эту строку. В этом случае можно использовать следующую команду:

grep test *file 

Результат следующий:

$ grep test test* #查找前缀有“test”的文件包含“test”字符串的文件  
testfile1:This a Linux testfile! #列出testfile1 文件中包含test字符的行  
testfile_2:This is a linux testfile! #列出testfile_2 文件中包含test字符的行  
testfile_2:Linux test #列出testfile_2 文件中包含test字符的行 

5. Рекурсивно искать файлы, удовлетворяющие критериям. Например, чтобы найти файлы, содержащие строку "update", во всех файлах в указанном каталоге /etc/acpi и его подкаталогах (если они есть), и вывести содержимое строк, содержащих эту строку, используйте следующую команду:

grep -r update /etc/acpi 

Результат вывода следующий:

$ grep -r update /etc/acpi #以递归的方式查找“etc/acpi”  
#下包含“update”的文件  
/etc/acpi/ac.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of IO.)  
Rather than  
/etc/acpi/resume.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of  
IO.) Rather than  
/etc/acpi/events/thinkpad-cmos:action=/usr/sbin/thinkpad-keys--update 

6. Обратный поиск. В предыдущих примерах выполняется поиск и вывод строк, удовлетворяющих критериям. Использование параметра "-v" позволяет вывести содержимое строк, не удовлетворяющих критериям.

Чтобы найти строки, не содержащие "test", в файлах, имена которых содержат "test", используйте следующую команду:

grep -v test *test*

Результат следующий:

$ grep-v test* #查找文件名中包含test 的文件中不包含test 的行  
testfile1:helLinux!  
testfile1:Linis a free Unix-type operating system.  
testfile1:Lin  
testfile_1:HELLO LINUX!  
testfile_1:LINUX IS A FREE UNIX-TYPE OPTERATING SYSTEM.  
testfile_1:THIS IS A LINUX TESTFILE!  
testfile_2:HELLO LINUX!  
testfile_2:Linux is a free unix-type opterating system.  
Другие расширения