How to use the uniq command: 2-Minute Linux Tips
Оглавление:
- Синтаксис команды Grep
- Как использовать
grep
для поиска строки в файлах - Инвертировать совпадение (исключить)
- Как использовать Grep для поиска строки в выводе команды
- Рекурсивный поиск
- Показывать только имя файла
- Поиск без учета регистра
- Поиск полных слов
- Показать номера строк
- Граф Матчи
- Поиск нескольких строк (шаблонов)
- Бесшумный режим
- Основное регулярное выражение
- Расширенные регулярные выражения
- Линии печати перед матчем
- Линии печати после матча
- Вывод
Команда
grep
которая обозначает «глобальная печать регулярных выражений», является одной из самых мощных и часто используемых команд в Linux.
Grep ищет в одном или нескольких входных файлах строки, соответствующие заданному шаблону, и записывает каждую соответствующую строку в стандартный вывод. Если файлы не указаны,
grep
читает из стандартного ввода, которое обычно является выводом другой команды.
В этом руководстве мы покажем вам, как использовать команду
grep
на практических примерах и подробно расскажем о наиболее распространенных опциях GNU
grep
.
Синтаксис команды Grep
Прежде чем приступить к использованию команды
grep
, давайте начнем с обзора основного синтаксиса.
Выражения утилиты
grep
имеют следующую форму:
grep PATTERN
Элементы в квадратных скобках не являются обязательными.
-
OPTIONS
- Ноль или более вариантов. Grep предоставляет ряд опций, которые контролируют его поведение.PATTERN
- шаблон поиска.FILE
- Ноль или более имен входных файлов.
Чтобы иметь возможность искать файл, пользователь, выполняющий команду, должен иметь доступ на чтение к файлу.
Как использовать
grep
для поиска строки в файлах
Основное использование команды
grep
- поиск строки (текста) в файле.
Например, для отображения строк из файла
/etc/passwd
содержащего строку
bash
вы можете использовать следующую команду:
grep bash /etc/passwd
Вывод должен выглядеть примерно так:
root:x:0:0:root:/root:/bin/bash linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Если строка содержит пробелы, вам необходимо заключить ее в одинарные или двойные кавычки:
grep "Gnome Display Manager" /etc/passwd
Инвертировать совпадение (исключить)
Чтобы отобразить линии, которые не соответствуют шаблону, используйте параметр
-v
(или
--invert-match
).
Например, для отображения строк из файла
/etc/passwd
которые не содержат строку
nologin
вы можете использовать следующую команду:
grep -v nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash colord:x:124:124::/var/lib/colord:/bin/false git:x:994:994:git daemon user:/:/usr/bin/git-shell linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Как использовать Grep для поиска строки в выводе команды
Вместо указания входных файлов вы можете направить вывод другой команды в
grep
, а затем отобразить только строки, соответствующие заданному шаблону.
Например, чтобы узнать, какие процессы выполняются в вашей системе как пользовательские
www-data
вы можете использовать следующую команду
ps
:
ps -ef | grep www-data
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
Вы также можете объединить несколько каналов в команду. Как вы можете видеть в выводе выше, есть также строка, содержащая процесс
grep
. Если вы не хотите, чтобы эта строка отображалась, передайте вывод другому экземпляру
grep
как показано ниже.
ps -ef | grep www-data | grep -v grep
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
Рекурсивный поиск
Для рекурсивного поиска шаблона используйте параметр
-r
(или
--recursive
). Это позволит выполнить поиск по всем файлам в указанном каталоге, пропуская символические ссылки, которые встречаются рекурсивно. Чтобы
--dereference-recursive
по всем символическим ссылкам, используйте опцию
-R
(или
--dereference-recursive
).
В следующем примере мы ищем строку
linuxize.com
во всех файлах в каталоге
/etc
:
grep -r linuxize.com /etc
Команда выведет соответствующие строки с префиксом полного пути к файлу.
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com;
Если вместо
-r
вы используете опцию
-R
grep
будет следовать по всем символическим ссылкам:
grep -R linuxize.com /etc
Обратите внимание на последнюю строку вывода. Эта строка не печатается в приведенном выше примере, потому что файлы в каталоге с
sites-enabled
Nginx являются символическими ссылками на файлы конфигурации в каталоге
sites-available
.
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com; /etc/nginx/sites-enabled/linuxize.com: server_name linuxize.com www.linuxize.com;
Показывать только имя файла
Чтобы подавить вывод
grep
по умолчанию и печатать только имена файлов, содержащих сопоставленный шаблон, вы можете использовать
--files-with-matches
-l
(или
--files-with-matches
).
Например, для поиска во всех файлах, заканчивающихся на
.conf
в текущем рабочем каталоге, и печати только имен файлов, содержащих строку типа
linuxize.com
:
grep -l linuxize.com *.conf
Вывод будет выглядеть примерно так:
tmux.conf haproxy.conf
Опция
-l
обычно используется в сочетании с рекурсивной опцией
-R
:
Поиск без учета регистра
По умолчанию команда
grep
чувствительна к регистру. Это означает, что прописные и строчные символы рассматриваются как разные.
Чтобы игнорировать регистр при поиске, используйте параметр
-i
(или
--ignore-case
).
Например, при поиске
Zebra
без какой-либо опции следующая команда не будет отображать никаких выходных данных, то есть есть совпадающие строки:
grep Zebra /usr/share/words
Но если вы выполняете поиск без учета регистра, используя опцию
-i
, он будет совпадать с прописными и строчными буквами:
grep -i Zebra /usr/share/words
Указание «Зебра» будет соответствовать «Зебра», «ZEbrA» или любой другой комбинации прописных и строчных букв для этой строки.
Поиск полных слов
При поиске «gnu»
grep
также напечатает строки, в которых «gnu» встроен в более крупные слова, такие как «cygnus» или «magnum».
grep gnu /usr/share/words
cygnus gnu interregnum lgnu9d lignum magnum magnuson sphagnum wingnut
Чтобы вернуть только те строки, в которых указанная строка является целым словом (заключенным в
--word-regexp
символы), используйте параметр
-w
(или
--word-regexp
).
az
,
AZ
и
0-9
) и подчеркивания (
_
). Все остальные символы рассматриваются как несловесные символы.
grep -w gnu /usr/share/words
Показать номера строк
Чтобы показать количество строк, которые содержат строку, соответствующую шаблону, используйте параметр
-n
(или
--line-number
). При использовании этой опции
grep
будет печатать совпадения на стандартный вывод с префиксом номера строки, в которой он был найден.
Например, чтобы отобразить строки из файла
/etc/services
содержащие строку
bash
префиксом с соответствующим номером строки, вы можете использовать следующую команду:
grep -n 10000 /etc/services
Вывод ниже показывает нам, что совпадения находятся в строках 10423 и 10424.
10423:ndmp 10000/tcp 10424:ndmp 10000/udp
Граф Матчи
Чтобы напечатать количество совпадающих строк в стандартный вывод, используйте параметр
-c
(или
--count
).
В приведенном ниже примере мы подсчитываем количество учетных записей, которые имеют
/usr/bin/zsh
в качестве оболочки.
grep -c '/usr/bin/zsh' /etc/passwd
Поиск нескольких строк (шаблонов)
Два или более шаблонов поиска могут быть объединены с помощью оператора ИЛИ
|
, По умолчанию
grep
интерпретирует шаблон как основное регулярное выражение, где метасимволы, такие как
|
потерять свое особое значение, и их версии с обратной косой чертой должны быть использованы.
В приведенном ниже примере мы ищем все вхождения слов
fatal
,
error
и
critical
в файле ошибок журнала Nginx:
grep 'fatal\|error\|critical' /var/log/nginx/error.log
grep -E 'fatal|error|critical' /var/log/nginx/error.log
Бесшумный режим
-q
(или
--quiet
) говорит
grep
не писать что-либо на терминал (стандартный вывод). Если совпадение найдено, команда завершится со статусом
0
. Это полезно при использовании
grep
в сценариях оболочки, где вы хотите проверить, содержит ли файл строку, и выполнить определенное действие в зависимости от результата.
Вот пример использования
grep
в тихом режиме в качестве команды тестирования в операторе
if
:
if grep -q PATTERN filename then echo pattern found else echo pattern not found fi
Основное регулярное выражение
GNU Grep имеет два набора функций регулярных выражений, Basic и Extended. По умолчанию
grep
интерпретирует шаблон как основное регулярное выражение.
При использовании в основном режиме регулярных выражений все остальные символы, кроме метасимволов, на самом деле являются регулярными выражениями, которые соответствуют друг другу. Ниже приведен список наиболее часто используемых метасимволов:
-
Используйте символ
^
(символ каретки), чтобы сопоставить выражение в начале строки. В следующем примере строка^kangaroo
будет соответствовать только в том случае, если она встречается в самом начале строки.grep "^kangaroo" file.txt
Используйте символ
$
(доллар), чтобы соответствовать выражению в конце строки. В следующем примере строкаkangaroo$
будет соответствовать только в том случае, если она встречается в самом конце строки.grep "kangaroo$" file.txt
Используйте
.
(точка) символ для соответствия любому отдельному символу. Например, чтобы сопоставить все, что начинается сkan
затем имеет два символа и заканчивается строкойroo
, вы можете использовать следующий шаблон:grep "kan..roo" file.txt
использование
accept
или «accent
, вы можете использовать следующий шаблон:grep "accet" file.txt
использование
co(any_letter_except_l)a
, такой какcoca
,cobalt
и т. Д., Но не будет совпадать со строками, содержащимиcola
,grep "coa" file.txt
Чтобы избежать специального значения следующего символа, используйте символ
\
(обратная косая черта).
Расширенные регулярные выражения
Чтобы интерпретировать шаблон как расширенное регулярное выражение, используйте параметр
-E
(или
--extended-regexp
). Расширенные регулярные выражения включают в себя все основные метасимволы, а также дополнительные метасимволы для создания более сложных и мощных шаблонов поиска. Ниже приведены некоторые примеры:
-
Сопоставьте и извлеките все адреса электронной почты из данного файла:
grep -E -o "\b+@+\.{2, 6}\b" file.txt
Сопоставьте и извлеките все действительные IP-адреса из данного файла:
grep -E -o '(25|2|??)\.(25|2|??)\.(25|2|??)\.(25|2|??)' file.txt
Опция
-o
используется для печати только соответствующей строки.
Линии печати перед матчем
Чтобы напечатать определенное количество строк перед сопоставлением строк, используйте параметр
-B
(или
--before-context
).
Например, чтобы отобразить пять строк начального контекста перед сопоставлением строк, вы должны использовать следующую команду:
Линии печати после матча
Чтобы напечатать определенное количество строк после сопоставления строк, используйте параметр
-A
(или
--after-context
).
Например, чтобы отобразить пять строк конечного контекста после сопоставления строк, вы должны использовать следующую команду:
Вывод
Команда
grep
позволяет вам искать шаблон внутри файлов. Если совпадение найдено, grep напечатает строки, содержащие указанный шаблон.
На странице руководства пользователя Grep можно узнать больше о Grep.
grep терминалТекст для обмена сообщениями: текст или текст не в формате
«Не текстовое сообщение во время церкви» и другие избранные ...
Найти информацию в текстовых файлах Индексные файлы Поиск Слова Lite
Индексный поиск файлов Слова Lite похожи на ваш собственный Google ... для многих текстовых файлов находятся на вашем жестком диске.
Найти и заменить текст в нескольких файлах навалом в Windows
Найти и заменить инструмент поможет вам найти и заменить текст несколькими файлов навалом. Просто введите текст и нажмите «Заменить», чтобы немедленно заменить текст.