Я хотел бы пройтись по различиям между grep
, pgrep
, egrep
и fgrep
и как я хотел бы использовать их.
Я хотел бы пройтись по различиям между grep
, pgrep
, egrep
и fgrep
и как я хотел бы использовать их.
Ответы:
grep - это аббревиатура, которая расшифровывается как «Global Regular Expressions Print». grep - это программа, которая сканирует указанный файл или файлы построчно, возвращая строки, содержащие шаблон. Шаблон - это выражение, которое определяет набор строк путем интерпретации символов как метасимволов. Например, метасимвол звездочки (*) интерпретируется как означающий «ноль или более предшествующего элемента». Это позволяет пользователям вводить короткие последовательности символов и метасимволов в команду grep, чтобы компьютер показывал нам, какие строки в каких файлах совпадают.
Стандартная команда grep выглядит так:
grep <flags> '<regular expression>' <filename>
grep выводит результаты поиска на экран (stdout) и возвращает следующие выходные значения:
0 A match was found.
1 No match was found.
>1 A syntax error was found or a file was inaccessible
(even if matches were found).
Некоторые общие флаги: -c
для подсчета количества успешных совпадений и не распечатывания фактических совпадений, -i
для того , чтобы сделать поиск нечувствительным -n
к регистру, печатать номер строки перед каждой распечаткой совпадения, -v
чтобы взять дополнение регулярного выражения (т.е. вернуть строки, которые не совпадают), и -l
печатать имена файлов с линиями, которые соответствуют выражению.
egrep - это сокращение, которое расшифровывается как «Extended Global Regular Expressions Print».
Буква «E» в egrep означает, что шаблон рассматривается как регулярное выражение. «Расширенные регулярные выражения», сокращенно «ERE», включены в egrep. задать расширенный (который является таким же , как grep -E
) лечит +
, ?
, |
, (
, и , )
как мета-символы.
В основных регулярных выражений (с Grep), мета-символы ?
, +
, {
, |
, (
, и )
теряют особый смысл. Если вы хотите Grep рассматривать эти символы как мета-символы, избежать их \?
, \+
, \{
, \|
, \(
, и \)
.
Например, здесь grep использует базовые регулярные выражения, где плюс обрабатывается буквально, возвращается любая строка с плюсом.
grep "+" myfile.txt
egrep, с другой стороны, обрабатывает «+» как метасимвол и возвращает каждую строку, потому что «плюс» интерпретируется как «один или несколько раз».
egrep "+" myfile.txt
Здесь каждая строка возвращается, потому что +
egrep был обработан как метасимвол. обычный grep искал бы только строки с литералом +
.
fgrep - это аббревиатура, обозначающая «Печать глобальных регулярных выражений с фиксированной строкой».
fgrep (то же самое, что и grep -F) является фиксированным или быстрым grep и ведет себя как grep, но НЕ распознает мета-символы регулярных выражений как специальные. Поиск завершится быстрее, потому что он обрабатывает только простую строку, а не сложный шаблон.
Например, если бы я хотел найти в моем .bash_profile литеральную точку (.), Тогда было бы сложно использовать grep, потому что мне пришлось бы избегать точки, потому что точка - это метасимвол, который означает «подстановочный знак, любой отдельный символ»:
grep "." myfile.txt
Приведенная выше команда возвращает каждую строку myfile.txt. Сделайте это вместо этого:
fgrep "." myfile.txt
Тогда только строки, которые имеют буквальный «.» в них возвращаются. fgrep помогает нам не убегать от мета-символов.
pgrep - это аббревиатура, обозначающая «Печать глобальных регулярных выражений Process-ID».
pgrep просматривает запущенные в данный момент процессы и перечисляет идентификаторы процессов, которые соответствуют критериям выбора для stdout. pgrep удобен, когда все, что вы хотите знать - это целое число процесса. Например, если бы я хотел знать только идентификатор процесса моего процесса mysql, я бы использовал команду, pgrep mysql
которая возвращала бы идентификатор процесса, например 7312.
pgrep
руководства : имя процесса, используемого для сопоставления, ограничено 15 символами, присутствующими в выходных данных / proc / pid / stat . Используйте параметр -f для сопоставления с полной командной строкой / proc / pid / cmdline .