НАЗВА

grep, egrep, fgrep - вивід рядків узгоджених із зразком

СИНОПСИС

grep [ опції ] ЗРАЗОК [ FILE ...]
grep [ опції ] [ -e ЗРАЗОК | -f ФАЙЛ ] [ ФАЙЛ ...]

ОПИС

Grep шукає у вказаному вводі ФАЙЛ(И) (чи в звичному вводі, якщо не вказано файли, чи вказана назва файлу - ) рядки, що містять збіг із наданим зразком ЗРАЗОК . За замовчуванням, grep друкує відповідні рядки.

Додатково, є два варіанти програм: egrep та fgrep . Egrep - це те саме, що grep -E . Fgrep - це те саме, що grep -F.

ОПЦІЇ

-A ЧИСЛО, --after-context=ЧИСЛО : Вивести ЧИСЛО рядків наступного контексту після відповідних рядків. Рядок складений з символів -- розмежує суміжні групи збігу.

-a , --text : Обробляти двійковий файл, наче він текстовий; це тотожно опції --binary-files=text.

-B ЧИСЛО, --before-context=ЧИСЛО : Вивести ЧИСЛО рядків попереднього контексту перед відповідними рядками. Рядок складений з символів -- розмежує суміжні групи збігу.

-C ЧИСЛО, --context=ЧИСЛО : Вивести ЧИСЛО рядків контексту. Рядок складений з символів -- розмежує суміжні групи збігу.

-b, --byte-offset : Ставить перед кожним рядком номер блоку, в якому він був знайдений. Це може знадобитись при пошуку блоків за контекстом (блоки нумеруються з 0).

--binary-files=ТИП : Якщо перші декілька байтів файлу вказують що він утримує двійкові дані, припустити що файл буде ТИП типу. За замовчуванням ТИП вважається binary (двійковим) і grep виводить рядок повідомлення про співпадання ("binary file matches"), або жодних повідомлень у випадку неузгодження з зразком. Якщо вказати ТИП як without-match, grep вважатиме що жодний двійковий файл не співпадає, це рівносильне -I опції. Якщо ТИП буде text, grep обробляє двійкові файли так ніби вони були звичайними текстовими, це рівносильне -a опції. Попередження: --binary-files=text може також вивести двійкове сміття, що іноді матиме небажаний ефект якщо виводом служить термінал, чий двигун може сприйняти цей вивід за команди.

--colour[=КОЛИ], --color[=КОЛИ] : Оточує рядок що співпав з зразком кольором, вказаним у змінній середовища GREP_COLOR. КОЛИ може бути never' (ніколи),always' (завжди) або `auto' (автоматично).

-c, --count : Пригнічує звичайний вивід, натомість виводить число яке дорівнює кількості рядків що співпала у кожному файлі вводу. З -v, --invert-match опцією (дивіться нижче) виводить число рядків що не співпала.

-D ДІЯ, --device=ДІЯ : Якщо файл вводу є пристроєм, FIFO або сокетом, використає ДІЮ щоб обробити ввід. За замовчуванням дією є read, що означає що пристрої будуть прочитані так, ніби вони є звичайними файлами. Якщо значенням ДІЇ буде skip, пристрої на братимуться до уваги.

-d ДІЯ, --directories=ДІЯ : Якщо файл вводу є каталогом, використає ДІЮ щоб обробити його. За замовчуванням ДІЄЮ є read, що означає що каталоги читаються так, ніби вони є звичайним файлами. Якщо значенням ДІЇ буде skip, каталоги не братимуться до уваги. Якщо ж ДІЄЮ буде recurse, grep прочитає кожний файл у кожному каталозі рекурсивно, це рівнозначно -r опції.

-E, --extended-regexp : Розглядає ЗРАЗОК як розширений регулярний вираз (дивіться нижче).

-e ЗРАЗОК, --regexp=ЗРАЗОК : Використає ЗРАЗОК як зразок. Зручно для використання зразків що починаються з - (риски).

-F, --fixed-strings : Розгляне ЗРАЗОК як список фіксованих рядків, розділених новою лінією; співпадання може відбутися з любим з них.

-P, --perl-regexp : Розгляне ЗРАЗОК як Perl регулярний вираз.

-f ФАЙЛ, --file=ФАЙЛ : Вкаже файл у якому знаходяться ЗРАЗКИ, один на кожний рядок. Порожній файл утримує нуль зразків і тому не не співпадає з нічим.

-G, --basic-regexp : Розгляне ЗРАЗОК як базовий регулярний вираз (дивіться нижче). Це є стандартним поводженням.

-H, --with-filename : Виведе назву файлу рядом з кожним рядком співпадання.

-h, --no-filename : Запобігає показу назви файлу рядом з кожним рядком що співпав. Використовується при пошуку по декільком файлам.

--help : Виводить коротке повідомлення з допомогою.

-I : Розглядатиме двійкові файли так, ніби вони не містять жодних співпадань; опція рівнозначна --binary-files=without-match.

-i, --ignore-case : Ігнорує регістр символів при порівняннях.

-L, --files-without-match : Пригнічує звичайний вивід, виводить тільки назви файлів де не відбулося співпадань. Пошук всередині файлів припиняється після першого ж співпадання.

-l, --files-with-matches : Пригнічує звичайний вивід, видає тільки назви файлів, що містять збіги. Пошук всередині файлів припиняється після першого ж співпадання.

Коли додатково вживається -c або --count опція, grep не виведе цифру більше за ЧИСЛО аргумент. Коли додатково вживається -v або --invert-match опція, grep припинить вивід після ЧИСЛА рядків що не співпали.

-m ЧИСЛО, --max-count=ЧИСЛО : Припиняє пошук всередині файла після вказаного ЧИСЛА рядків із співпаданнями. Якщо ввід відбувається з звичайного файла, grep зупинить пошук одразу ж на наступному рядку після останнього рядка що співпав і припинить роботу. Останнє дозволяє виклик процесу для відновлення пошуку з місця зупинки.

--mmap : Якщо можливо, використає ?mmap(2) системний виклик для зчитування вводу, замість ?read(2) за замовчуванням. В деяких випадках, --mmap призводить до кращих результатів. Тим не менш, --mmap може викликати довільне поводження (включаючи дамп оперативної пам'яті) якщо файл вводу зменшився розміром під час дії grep, або якщо виникла помилка вводу/виводу.

-n, --line-number : Виводить перед кожним рядком його номер у файлі (рядки нумеруються з 1).

-o, --only-matching : Покаже лише ту частину рядка що співпала із ЗРАЗКОМ. (Зручно для тестування зразків.)

--label=НАЗВА : Вказує ніби ввід надходить з файла з назвою НАЗВА. Ця опція корисна у поєднанні з знаряддям на кшталт zgrep, тобто gzip -cd foo.gz | grep -label=foo ЗРАЗОК.

--line-buffering : Використає буферування рядків, може сказатися на ефективності.

-q, --quiet, --silent : Мовчазний вивід. Не виводитиме нічого на стандартний пристрій виводу. Зупиниться одразу, із нульовим статусом виходу (успіх), як тільки буде знайдене співпадання, навіть якщо виявиться якась помилка. Також дивіться -s і --no-message опції.

-R, -r, --recursive : Прочитає кожний файл у кожному підкаталозі рекурсивно. Рівнозначна -d recurse опції.

--include=ЗРАЗОК : Рекурсивно шукатиме тільки у каталогах, назва яких співпадає із ЗРАЗКОМ.

--exclude=ЗРАЗОК : Рекурсивно шукатиме у всіх каталогах, окрім тих чия назва співпадає із ЗРАЗКОМ.

-s, --no-messages : Пригнічує повідомлення про помилки про неіснуючі файли або файли, недоступні для прочитання. Примітка щодо переносності: на відміну від grep GNU, традиційна grep не узгоджувалась з POSIX.2 у тому що в останній була відсутня опція -q і її опція -s, натомість, поводилась як -s GNU. Оболонкові скрипти які бажають бути сумісними з традиційною grep, повинні уникати обидвох опцій, -q і -s, натомість переправляючи вивід до /dev/null.

-U, --binary : Розглядатиме файл(и) як двійкові. За замовчуванням, у MS-DOS та MS-Windows системах, grep вгадує тип файлу прочитавши його перші 32 кілобайти. Якщо grep вирішить що це текстовий файл, вона видалить CR знаки з оригінального файлу (щоб забезпечити функціонування ^ та $). Вказування -U відміняє це вгадування, зумовлюючи прочитання всіх файлів і буквальну передачу їх механізму порівнювання; якщо це був текстовий файл із CR/LF парою наприкінці кожного рядка, це може призвести до неспівпадання з деякими зразками. Ця опція не має жодного впливу на відмінних від MS-DOS/MS-Windows платформах.

-u, --unix-byte-offsets : Звітувати розположення байтів типу Юнікс. Цей ключ змушує grep сприймати розположення байтів у файлі так ніби це був звичайний текстовий файл Юнікса, тобто із видаленими CR знаками. Це призведе до результатів ідентичних із запуском grep на Юнікс машинах. Ця опція не працює лише у поєднанні з -b ключем і не має жодного впливу на відмінних від MS-DOS/MS-Windows платформах.

-V, --version : Виведе номер версії програми grep у вигляді стандартної помилки. Номер версії програми повинен включатися у всі повідомлення про вади (дивіться нижче).

-v, --invert-match : Міняє зміст співпадань. Виводить усі рядки, за винятком тих, що містять співпадання.

-w, --word-regexp : Серед порівнювань із зразком вибирає лише ті що цілком співпадають і утворюють цілі "слова". Під цілковитим співпаданням мається на увазі що послідовність знаків тексту що співпала один до одного із зразком повинна обмежуватись з обох сторін знаками що не відносяться до "слова"; це може бути початок або кінець рядка, або любий знак крім літер, чисел і твердого пробілу (останні regex розглядатиме як такі що утворюють "слово").

-x, --line-regexp : Вибере лише співпадання із цілим рядком.

-y : Застарілий синонім для -i.

-Z, --null : Виведе нульовий байт (NULL знак ASCII) замість знака що звичайно слідує за назвою файла. Так, наприклад, grep -lZ помістить нульовий байт після кожного імені файла замість стандартної нової лінії. Ця опція забезпечує однозначний вивід, навіть у випадку назв файлів що містять незвичні знаки, такі як знак нового рядка. Ця опція може використовуватись разом з такими командами як find -print, perl -0, sort -z і xargs для обробки довільних назв файлів.

-z, --null-data : Розгляне ввід ак набір рядків, кожен з яких буде закінчуватись нульовим байтом (NULL знак ASCII) замість знака нового рядка. Так само як і -Z або --null опції, може бути використаною з командами на зразок sort -z для обробки довільних назв файлів.

РЕГУЛЯРНІ ВИРАЗИ

Регулярний вираз - це зразок що описує набір текстових ланцюжків. Побудова регулярних виразів дещо схожа на побудову арифметичних виразів у тому що використовуються різноманітні оператори для комбінації менших виразів.

Grep розуміє три, дещо відмінні, версії синтаксису регулярних виразів, а саме: "basic", "extended" і "perl" (базовий, розширений і perl). У grep GNU немає різниці у функціональності при використанні перших двох версій. У інших втіленнях, базові регулярні вирази - менш потужні. Наступне описує розширені регулярні вирази, відмінності від базових вказані в кінці. Perl регулярні вирази надають додаткову функціональність. Це нова риса програми grep, не скрізь підтримувана. Ми не будемо озглядати цю версію тут, натомість зверніться до perlrequick((1) або perlre(1).

Основною складовою частиною є регулярні вирази що співпадають з одним знаком. Більшість знаків, включаючи всі літери і цифри утворять регулярний вираз що співпадатиме з тим самим знаком. Любий знак із спеціальним значенням може бути екрановано за допомогою попереднього оберненого слешу.

Вирази в квадратних дужках ([ і ]) співпадатимуть із одним із знаків перелічених всередині дужок, за винятком коли першим знаком є шапочка (^), у такому разі цей вираз, навпаки, співпадатиме із любим знаком окрім перечислених у списку. Так, наприклад, вираз [01234] співпаде з однією з цих цифр, тоді як [^24] - з любим знаком крім 2 і 4.

Всередині виразів у квадратних дужках можуть також знаходитись вирази діапазону знаків. Діапазон знаків складатиметься з двох знаків із рискою поміж ними. Діапазон співпадатиме із любим знаком що знаходиться між двома вказаними, включаючи самі вказівники. Пошук можливих співпадань здійснюється завдяки сортуванню, відповідно до впорядкованості і набору знаків локалі. Так, наприклад, у стандартній C локалі, [a-d] рівнозначне [abcd]. Деякі локалі сортують у словниковій послідовності, в такому випадку [a-d] може означати [aBbCcDd], натомість. Щоб отримати традиційну інтерпретацію виразів у квадратних дужках, можете спробувати надати змінній середовища LC_ALL значення C (дивіться ?ЗМІННІ СЕРЕДОВИЩА| нижче).

Накінець, певні класи знаків об'єднані і можуть вказуватись як одна назва всередині квадратних дужок. Їхні назви підказують що саме вони означають:

**[:alnum:]** (_alphanumeric_), літери і цифри, рівнозначне **[0-9A-Za-z]**
**[:alpha:]** (_alphabet_), лише літери, рівнозначне **[A-Za-z]**
**[:cntrl:]** (_control characters_), керувальні знаки.
**[:digit:]** (_numeric digit_), числа, рівнозначне **[0-9]**.
**[:graph:]** (_graphical_), усі знаки що можна "надрукувати" (виключає пробіли).
**[:lower:]** (_lowercase_), літери нижнього регістру, рівнозначне **[a-z]**.
**[:print:]** (_printable_), усі знаки що можна "надрукувати" (виключає пробіли), аналогічний до **graph**.
**[:punct:]** (_punctuation_), знаки пунктуації.
**[:space:]** (_whitespace_), пробіли, включаючи знак нового рядка.
**[:upper:]** (_uppercase letters_), літери верхнього регістру.
**[:xdigit:]** (_hexadecimal digit_), шістнадцяткові числа.

Класи знаків відрізняються від діапазонів тим що класи не залежать від C локалі і ASCII кодування знаків. (Зауважте що квадратні дужки у класах знаків являються частиною назв класів і повинні бути включені на додачу до квадратних дужок що оточують список у квадратних дужках. Тобто, щоб отримати список, нам необхідно використати дві пари квадратних дужок, наприклад, ?:alpha:.)

Більшість метазнаків (спеціальних знаків) втрачають своє особливе значення всередині списку у квадратних дужках. Щоб включити у список буквальний знак ], помістіть його першим у списку, буквальний ^ - де завгодно, крім першим, буквальну - (риску) - помістіть її останньою в списку.

Крапка . співпадає з будь-яким одним знаком. Символ \w є синонімом для ?:allnum:, тоді як \W для [^[:alnum:]].

Шапочка ^ і знак долару $, це метазнаки що співпадають відповідно з початком і кінцем рядка. Символи < й > вказують на початок і кінець слова. Символ \b співпадає з порожнім місцем на початку і кінці слова, тоді як \B - з порожнім місцем що не межує з словом.

За регулярними виразами можуть стояти кількісні оператори. Як вказує назва, останні вказують на можливу кількість повторень виразу:

**?** Попередній вираз є необов'язковим і може повторитись лише один раз.
***** Попередній вираз може повторитись нуль або більшу кількість разів.
**+** Попередній вираз повинен повторитись принаймні один раз і до нескінченості.
**{**_n_**}** Попередній вираз повинен повторитись точно _n_ разів.
**{**_n_**,}** Попередній вираз повинен повторитись _n_ або більше разів.
**{**_n_**,**_m_**}** Попередній вираз повинен повторитись щонайменше _n_ разів, але не більше _m_ раз.

Два або більше регулярних вирази можна об'єднати, регулярний вираз який отримаємо в результаті співпадатиме з ланцюжком що утворився з частин ланцюжків що співпадають з частинами регулярного виразу.

Два або більше регулярних вирази можуть бути об'єднаними інфіксним оператором |; регулярний вираз що отримаємо в результаті співпадатиме з любим ланцюжком що узгоджується з однією з, розділених інфіксом, частин регулярного виразу.

Кількісні оператори пересилюють об'єднання регулярних виразів, останнє, в свою чергу, пересилює інфіксний вибір. Передування виразів може бути змінено якщо частину виразу взяти в круглі дужки.

Обернене звертання (backreference) **n, де n це одноцифрове число, співпадатиме з ланцюжком що відповідає n-нній частині регулярного виразу, взятій у круглі дужки.

У базовій версії регулярних виразів, спеціальні знаки ?, +, {, |, ( й ) втрачають своє особливе значення, використовуйте натомість їхню версію з оберненим слешом: \?, +, {, |, ( і ).

Традиційна egrep не підтримувала метазнак {, і деякі egrep втілення підтримують { натомість, тож машинонезалежні скрипти повинні уникати використання { у зразках egrep і вживати [{] для співпадання з буквальною фігурною дужкою.

GNU egrep схильна до традиційного вживання через те що припускає що { не є спеціальним знаком, таким як початок недійсного кількісного вказівника. Так, наприклад, команда egrep '{1' шукатиме ланцюжка що складається з двох знаків {1, замість того що видати синтаксичну помилку регулярного виразу. POSIX.2 дозволяє таке поводження як додаткове розширення, але мобільні скрипти повинні уникати цього.

ЗМІННІ СЕРЕДОВИЩА

Поведінка grep залежить від змінних середовища, описаних нижче. Для додаткової інформації про змінні середовища дивіться також сторінку посібника для ?environ(5).

Локаль LC_foo встановлюється через прочитання трьох змінних середовища, LC_ALL, LC_foo, LANG, саме в цій послідовності. Найперша з цих змінних що буде встановленою вказуватиме локаль. Наприклад, якщо LC_ALL не встановлена, зате LC_MESSAGES надане значення pt_BR, тоді Бразільська Португальська мова використовуватиметься для LC_MESSAGES локалі. Локаль C вживатиметься якщо жодна з цих змінних середовища не є встановленою, або якщо locale каталог не інстальований, або, нарешті, якщо grep не була копільованою з підтримкою іноземних мов (NLS - national language support).

GREP_OPTIONS : Ця змінна вказує на опції що додаватимуться попереду будь-яких інших прапорців під час виклику програми. Так, наприклад, якщо GREP_OPTIONS матиме значення '--binary-files=without-match', grep поводитиметься так ніби обидві опції, --binary-files=without-match та --directories=skip були вказані поперед аргументів на командній лінії. Якщо ви хочете надати GREP_OPTIONS більше значень, розділяйте їх пробілами. Обернений слеш екранує наступний знак, тож ви можете вживати також опції що містять пробіли і обернені слеші.

GREP_COLOR : Вказує колір для підсвітки співпадань.

LC_ALL, LC_COLLATE, LC_ALL : Ці змінні встановлюють LC_COLLATE локаль, що відповідає за порядок сортування використованого для інтерпретації діапазонів на зразок [a-z].

LC_ALL, LC_CTYPE, LANG : Ці змінні встановлюють LC_TYPE локаль, яка визначає типи знаків, тобто які з знаків є пробілами.

LC_ALL, LC_MESSAGES, LANG : Ці змінні встановлюють LC_MESSAGES локаль, яка визначає мову повідомлень grep. За замовчуванням, C локаль послуговується американською англійською.

POSIXLY_CORRECT : Якщо ця змінна встановлена, grep поводиться відповідно до POSIX.2 вимог; в протилежному випадку - як решта програм GNU. POSIX.2 вимагає щоб опції що слідують за назвами файлів розглядались теж як назви файлів; за замовчуванням такі опції переносяться на початок списку операндів і розглядаються як опції. Також POSIX.2 наполягає щоб нерозпізнані опції діагнозувалися як заборонені, незаконні (illegal), тоді як звичайно вони діагнозуються як недійсні ("invalid"). POSIXLY_CORRECT також робить неможливою _NGNU_nonoption_argv_flags, описану нижче.

NGNU_nonoption_argv_flags : (N у цьому випадку буде ідентифікаційним номером процесу grep.) Якщо x_-ний елемент цієї змінної є одиницею (1), не братиметься до уваги x-ний операнд grep як опція, навіть якщо даний операнд виглядає нею. Оболонка в змозі помістити цю змінну у середовище для використання кожною запущеною командою. Це надає змогу підказати які з операндів являються результатом розкриття назви файла або байдужого символу і тому не розглядатися як прапорець або опція програми. Ця властивість доступна лише з GNU C бібліотекою і тільки коли POSIXLY_CORRECT не є встановленою.

ДІАГНОСТИКА

Як правило, статусом виходу буде 0, якщо рядки що відповідають зразку знайдено і 1 у протилежному випадку. У випадку помилки, статусом виходу є 2, хіба використовувалась опція -q, --quiet або --silent і рядок із співпаданням було знайдено.

ДИВІТЬСЯ ТАКОЖ

regcomp(3), ?regex(7)

ВАДИ

Повідомлення про вади надсилайте на bug-gnu-utils@gnu.org. Впевніться що ви включили слово "grep" десь у полі "Subject:".

Великі значення у {n,m} виразах можуть спричинити використання grep значної кількості пам'яті. На додаток, деякі інші ускладнені регулярні вирази можуть вимагати значного часу і місця на обробку і зумовити недостачу пам'яті для grep.

Обернені звертання досить повільні і можуть вимагати додаткового часу на обробку.