БпСстСтС 15% ΠΎΡ‚ всички хостинг услуги

ВСствай умСнията си ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠžΡ‚ΡΡ‚ΡŠΠΏΠΊΠ° Π·Π° всСки хостинг ΠΏΠ»Π°Π½

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ΄: Skills Π—Π° Π½Π°Ρ‡Π°Π»ΠΎ
Заглавия
Linux

Как Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° `grep` Π·Π° Π½Π°ΠΌΠΈΡ€Π°Π½Π΅ Π½Π° информация във Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅

ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° grep β€” ΡΡŠΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΡ‚ Global Regular Expression Print β€” Π΅ Unix/Linux ΠΏΠΎΠΌΠΎΡ‰Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°, която сканира Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Ρ€Π΅Π΄ ΠΏΠΎ Ρ€Π΅Π΄ ΠΈ ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚Π²Π° всСки Ρ€Π΅Π΄, ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ‰ Π½Π° Π΄Π°Π΄Π΅Π½ шаблон. Вя Π΅ Π΄Π΅ Ρ„Π°ΠΊΡ‚ΠΎ стандарт Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° тСкст Π² POSIX-ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΈ систСми ΠΈ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΊΠ°ΠΊΡ‚ΠΎ основни, Ρ‚Π°ΠΊΠ° ΠΈ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈ рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ я ΠΏΡ€Π°Π²ΠΈ способна Π΄Π° ΡΡŠΠΏΠΎΡΡ‚Π°Π²Ρ всичко β€” ΠΎΡ‚ прост Π½ΠΈΠ· Π΄ΠΎ слоТни многосимволни шаблони.

Ако Π²ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π½Π°ΠΉ-краткият възмоТСн ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€: ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅ grep "pattern" filename Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π² Ρ„Π°ΠΉΠ», Π΄ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ -r Π·Π° рСкурсивно Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎ Π΄ΡŠΡ€Π²ΠΎ, -i Π·Π° ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠ½Π΅ Π±Π΅Π· Ρ€Π°Π·Π»ΠΈΠΊΠ° Π½Π° Π³Π»Π°Π²Π½ΠΈ ΠΈ ΠΌΠ°Π»ΠΊΠΈ Π±ΡƒΠΊΠ²ΠΈ, ΠΈ -n Π·Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° Π½ΠΎΠΌΠ΅Ρ€Π° Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π·Π°Π΅Π΄Π½ΠΎ с Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅. Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ Π½Π°Π²Π»ΠΈΠ·Π°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-дълбоко, ΠΎΠ±Ρ…Π²Π°Ρ‰Π°ΠΉΠΊΠΈ Ρ€Π΅Π°Π»Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ процСси, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с производитСлността ΠΈ Π½Π°ΠΏΡ€Π΅Π΄Π½Π°Π»ΠΈ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ Π·Π° рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΡƒΡ€ΠΎΡ†ΠΈ напълно пропускат.

Какво Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΏΡ€Π°Π²ΠΈ grep ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠ°ΠΊΠ°

grep Ρ‡Π΅Ρ‚Π΅ Π²Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ Ρ€Π΅Π΄ ΠΏΠΎ Ρ€Π΅Π΄ ΠΈ ΠΏΡ€ΠΈΠ»Π°Π³Π° ΠΊΡ€Π°Π΅Π½ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΎΡ‚ вашия рСгулярСн ΠΈΠ·Ρ€Π°Π·, към всСки Ρ€Π΅Π΄. GNU имплСмСнтацията (стандартна Π² Linux) ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ° Boyer-Moore-Horspool Π·Π° Π±ΡƒΠΊΠ²Π°Π»Π½ΠΈ Π½ΠΈΠ·ΠΎΠ²Π΅ ΠΈ конструкцията Thompson NFA Π·Π° шаблони с рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ. Π’Π°Π·ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° grep Π΄Π° Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π±ΡŠΡ€Π· ΠΏΡ€ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ β€” Ρ‚ΠΎΠΉ избягва ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΡ‚ΠΎ прослСдяванС, Π·Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ инструмСнти, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° PCRE, ΠΊΠ°Ρ‚ΠΎ perl ΠΈΠ»ΠΈ python.

Π’ сСмСйството GNU coreutils ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ Ρ‚Ρ€ΠΈ ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ изпълними Ρ„Π°ΠΉΠ»Π°:

ΠšΠΎΠΌΠ°Π½Π΄Π°ΠœΠ°ΡˆΠΈΠ½Π°Π‘Π»ΡƒΡ‡Π°ΠΉ Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°
grepBRE / ERE (с -E)Π‘ΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠ½Π΅ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅ с ΠΎΠ±Ρ‰ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
egrepERE (Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ рСгулярСн ΠΈΠ·Ρ€Π°Π·)Π‘ΡŠΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π·Π° grep -E
fgrepΠ‘Π°ΠΌΠΎ фиксирани низовСНай-Π±ΡŠΡ€Π·; Π±Π΅Π· интСрпрСтация Π½Π° рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ
zgrepBRE / ERE Π²ΡŠΡ€Ρ…Ρƒ компрСсирани файловСАрхиви .gz, .bz2
pgrepΠ‘ΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠ½Π΅ Π½Π° ΠΈΠΌΠ΅Π½Π° Π½Π° ΠΏΡ€ΠΎΡ†Π΅ΡΠΈΠ’ΡŠΡ€ΡΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° с процСси, Π½Π΅ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅

egrep ΠΈ fgrep са остарСли псСвдоними Π² ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈΡ‚Π΅ систСми; ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ grep -E ΠΈ grep -F ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ Π² скриптовС Π·Π° прСносимост.

ОсновСн синтаксис

grep [options] pattern [file ...]
  • pattern β€” Π½ΠΈΠ· ΠΈΠ»ΠΈ рСгулярСн ΠΈΠ·Ρ€Π°Π·, ΠΎΠ³Ρ€Π°Π΄Π΅Π½ΠΈ Π² ΠΊΠ°Π²ΠΈΡ‡ΠΊΠΈ
  • file β€” Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΏΡŠΡ‚ΠΈΡ‰Π° Π΄ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅; пропуснСтС Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΎΡ‚ стандартния Π²Ρ…ΠΎΠ΄
  • options β€” Ρ„Π»Π°Π³ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ промСнят ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈ ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠ½Π΅, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π° ΠΈΠ»ΠΈ производитСлността

МинималСн ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π°ΠΌΠΈΡ€Π° всСки Ρ€Π΅Π΄, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ Π΄ΡƒΠΌΠ°Ρ‚Π° "error" Π² syslog:

grep "error" /var/log/syslog

Π’ΠΈΠ½Π°Π³ΠΈ поставяйтС шаблона Π² ΠΊΠ°Π²ΠΈΡ‡ΠΊΠΈ. Π¨Π°Π±Π»ΠΎΠ½ΠΈ Π±Π΅Π· ΠΊΠ°Π²ΠΈΡ‡ΠΊΠΈ, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ΠΈ мСтасимволи Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π° (*, ?, [, $), Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π°Π·Π³ΡŠΡ€Π½Π°Ρ‚ΠΈ ΠΎΡ‚ ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π° ΠΏΡ€Π΅Π΄ΠΈ grep Π΄Π° Π³ΠΈ Π²ΠΈΠ΄ΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΌΡŠΠ»Ρ‡Π°Π»ΠΈΠ²ΠΈ, Π½Π΅Π²Π΅Ρ€Π½ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ.

Основни ΠΎΠΏΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ всСки администратор трябва Π΄Π° Π·Π½Π°Π΅

Π’ΡŠΡ€ΡΠ΅Π½Π΅ Π² мноТСство Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ

Π˜Π·Π±Ρ€ΠΎΡΠ²Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Π³Π»ΠΎΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π°:

grep "error" access.log error.log debug.log
grep "error" *.log

Π—Π° цяло Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎ Π΄ΡŠΡ€Π²ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ -r (слСдвайтС символни Π²Ρ€ΡŠΠ·ΠΊΠΈ с -R):

grep -r "error" /var/log/

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: На производствСни ΡΡŠΡ€Π²ΡŠΡ€ΠΈ с дълбоко Π²Π»ΠΎΠΆΠ΅Π½ΠΈ ΠΉΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΎΡ‚ ΠΆΡƒΡ€Π½Π°Π»ΠΈ, Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎΡ‚ΠΎ -r ΠΌΠΎΠΆΠ΅ Π΄Π° консумира Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π΅Π½ I/O. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Ρ‚Π΅ Π³ΠΎ с --include, Π·Π° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅Ρ‚Π΅ сканиранС Π½Π° Π΄Π²ΠΎΠΈΡ‡Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈΠ»ΠΈ Π½Π΅Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½ΠΈ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ:

grep -r --include="*.log" "error" /var/log/

Π’ΡŠΡ€ΡΠ΅Π½Π΅ Π±Π΅Π· Ρ€Π°Π·Π»ΠΈΠΊΠ° Π½Π° Π³Π»Π°Π²Π½ΠΈ ΠΈ ΠΌΠ°Π»ΠΊΠΈ Π±ΡƒΠΊΠ²ΠΈ (-i)

grep -i "error" application.log

Π’ΠΎΠ²Π° ΡΡŠΠΏΠΎΡΡ‚Π°Π²Ρ error, Error, ERROR, eRrOr ΠΈ всяка Π΄Ρ€ΡƒΠ³Π° комбинация ΠΎΡ‚ Π³Π»Π°Π²Π½ΠΈ ΠΈ ΠΌΠ°Π»ΠΊΠΈ Π±ΡƒΠΊΠ²ΠΈ. Π’ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΎ GNU grep с -i ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π° ΠΈ шаблона, ΠΈ Π²Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ Π² ΠΌΠ°Π»ΠΊΠΈ Π±ΡƒΠΊΠ²ΠΈ ΠΏΡ€Π΅Π΄ΠΈ сравнСниСто, ΠΊΠΎΠ΅Ρ‚ΠΎ добавя ΠΌΠ°Π»ΠΊΠΎ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ ΠΏΡ€ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅.

ПоказванС Π½Π° Π½ΠΎΠΌΠ΅Ρ€Π° Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ (-n)

grep -n "error" application.log

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π΅Π½ ΠΈΠ·Ρ…ΠΎΠ΄:

25:error occurred during processing
103:error: connection refused

НомСрата Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ са Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ трябва Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅Ρ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ към съвпадСниС Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€: vim +25 application.log отваря Ρ„Π°ΠΉΠ»Π° Π½Π° Ρ€Π΅Π΄ 25.

Π‘Ρ€ΠΎΠ΅Π½Π΅ Π½Π° съвпадСния (-c)

grep -c "error" application.log

Π’Ρ€ΡŠΡ‰Π° само броя Π½Π° ΡΡŠΠ²ΠΏΠ°Π΄Π°Ρ‰ΠΈΡ‚Π΅ Ρ€Π΅Π΄ΠΎΠ²Π΅, Π° Π½Π΅ самитС Ρ€Π΅Π΄ΠΎΠ²Π΅. ΠŸΡ€ΠΈ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π² мноТСство Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ всСки Ρ„Π°ΠΉΠ» ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° собствСн Π±Ρ€ΠΎΠΉ:

grep -c "error" *.log
access.log:0
debug.log:14
error.log:3

ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎ ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠ½Π΅ (-v)

grep -v "error" application.log

Π’Ρ€ΡŠΡ‰Π° всСки Ρ€Π΅Π΄, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° шаблона. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°: ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅ с ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ ΠΎΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ Ρ„Π°ΠΉΠ» ΠΏΡ€Π΅Π΄ΠΈ ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ ΠΏΠΎ Ρ‚Ρ€ΡŠΠ±Π° Π΄Ρ€ΡƒΠ³Π°Π΄Π΅:

grep -v "^#" /etc/nginx/nginx.conf | grep -v "^$"

Π’ΠΎΠ²Π° ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ с ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ (Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‰ΠΈ с #) ΠΈ ΠΏΡ€Π°Π·Π½ΠΈΡ‚Π΅ Ρ€Π΅Π΄ΠΎΠ²Π΅, оставяйки само Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΈ.

Π‘ΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠ½Π΅ Π½Π° Ρ†Π΅Π»ΠΈ Π΄ΡƒΠΌΠΈ (-w)

grep -w "error" application.log

Π‘Π΅Π· -w, Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ Π½Π° error Π±ΠΈ съвпаднало ΠΈ с errors, error_code ΠΈ myerror. Π€Π»Π°Π³ΡŠΡ‚ -w закотвя ΡΡŠΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ към Π³Ρ€Π°Π½ΠΈΡ†ΠΈ Π½Π° Π΄ΡƒΠΌΠΈ, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€Π΅Ρ…ΠΎΠ΄ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ словСсни символи ([a-zA-Z0-9_]) ΠΈ нСсловСсни символи.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ Ρ€Π΅Π΄ΠΎΠ²Π΅ (-m)

grep -m 5 "error" application.log

grep спира Ρ‡Π΅Ρ‚Π΅Π½Π΅Ρ‚ΠΎ Π½Π° Ρ„Π°ΠΉΠ»Π° слСд Π½Π°ΠΌΠΈΡ€Π°Π½Π΅ Π½Π° 5 ΡΡŠΠ²ΠΏΠ°Π΄Π°Ρ‰ΠΈ Ρ€Π΅Π΄Π°. ΠŸΡ€ΠΈ Ρ„Π°ΠΉΠ» с ΠΆΡƒΡ€Π½Π°Π» ΠΎΡ‚ 10 GB, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ трябва само Π΄Π° ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄ΠΈΡ‚Π΅ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° шаблон, -m 1 ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° изпълнСниС ΠΎΡ‚ сСкунди Π΄ΠΎ милисСкунди, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ grep ΠΈΠ·Π»ΠΈΠ·Π° Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ слСд ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ съвпадСниС.

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚Π½ΠΈ Ρ€Π΅Π΄ΠΎΠ²Π΅ (-A, -B, -C)

Π•Π΄Π½Π° ΠΎΡ‚ Π½Π°ΠΉ-рядко ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΡ€ΠΈ диагностициранС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ°, заобикалящитС Ρ€Π΅Π΄ΠΎΠ²Π΅ чСсто ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ основната ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°:

grep -A 3 "error" application.log   # 3 lines After the match
grep -B 3 "error" application.log   # 3 lines Before the match
grep -C 3 "error" application.log   # 3 lines of Context (before and after)

Π’ΠΎΠ²Π° Π΅ Ρ€Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π²ΠΈΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° error: connection refused ΠΈ Π²ΠΈΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° пълния стСк Π½Π° извикванията ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄Ρ…ΠΎΠ΄Π½Π°Ρ‚Π° заявка, която Π³ΠΎ Π΅ ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°Π»Π°.

Π¦Π²Π΅Ρ‚Π½ΠΎ открояванС (--color)

grep --color=auto "error" application.log

ΠŸΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ дистрибуции Π·Π°Π΄Π°Π²Π°Ρ‚ alias grep='grep --color=auto' Π² /etc/profile.d/ ΠΈΠ»ΠΈ ~/.bashrc. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ --color=always ΠΏΡ€ΠΈ ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ ΠΏΠΎ Ρ‚Ρ€ΡŠΠ±Π° към less -R, Π·Π° Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΡ‚Π΅ ANSI ΠΊΠΎΠ΄ΠΎΠ²Π΅Ρ‚Π΅:

grep --color=always "error" application.log | less -R

ΠžΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚Π²Π°Π½Π΅ само Π½Π° ΡΡŠΠ²ΠΏΠ°Π΄Π°Ρ‰Π°Ρ‚Π° част (-o)

По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ grep ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚Π²Π° цСлия ΡΡŠΠ²ΠΏΠ°Π΄Π°Ρ‰ Ρ€Π΅Π΄. Π€Π»Π°Π³ΡŠΡ‚ -o ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚Π²Π° само частта ΠΎΡ‚ Ρ€Π΅Π΄Π°, която Π΅ съвпаднала с шаблона:

grep -o "192.[0-9]*.[0-9]*.[0-9]*" access.log

Π’ΠΎΠ²Π° ΠΈΠ·Π²Π»ΠΈΡ‡Π° всСки IPv4 адрСс ΠΎΡ‚ ΠΆΡƒΡ€Π½Π°Π» Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ β€” ΠΏΠΎ Π΅Π΄ΠΈΠ½ адрСс Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ Ρ€Π΅Π΄ β€” ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΠΈΠ΄Π΅Π°Π»Π½ΠΎ Π·Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ ΠΏΠΎ Ρ‚Ρ€ΡŠΠ±Π° към sort | uniq -c | sort -rn Π·Π° Π½Π°ΠΌΠΈΡ€Π°Π½Π΅ Π½Π° Π½Π°ΠΉ-Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈΡ‚Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ.

ΠŸΠΎΡ‚ΠΈΡΠΊΠ°Π½Π΅ Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π° с ΠΈΠΌΠ΅Π½Π° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ (-h) ΠΈ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΌΡƒ ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ (-H)

ΠŸΡ€ΠΈ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π² мноТСство Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ grep добавя ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ„Π°ΠΉΠ»Π° ΠΏΡ€Π΅Π΄ΠΈ всяко съвпадСниС. -h потиска Ρ‚ΠΎΠ²Π°; -H Π³ΠΎ Π½Π°Π»Π°Π³Π° Π΄ΠΎΡ€ΠΈ ΠΏΡ€ΠΈ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π² Π΅Π΄ΠΈΠ½ Ρ„Π°ΠΉΠ». Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ -H Π² скриптовС, Π·Π° Π΄Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Ρ‚Π΅ послСдоватСлСн Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π° нСзависимо ΠΎΡ‚ броя Π½Π° ΠΏΡ€Π΅Π΄Π°Π΄Π΅Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅.

ΠžΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚Π²Π°Π½Π΅ само Π½Π° ΠΈΠΌΠ΅Π½Π° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ (-l ΠΈ -L)

grep -l "error" *.log    # files that contain the pattern
grep -L "error" *.log    # files that do NOT contain the pattern

ПолСзно Π² скриптовС Π·Π° внСдряванС Π·Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‰Π°Ρ‚ към остарял ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€.

РСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ с grep

Основни рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ (BRE)

grep ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° BRE ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅. ΠšΠ»ΡŽΡ‡ΠΎΠ²ΠΈ мСтасимволи:

ΠœΠ΅Ρ‚Π°ΡΠΈΠΌΠ²ΠΎΠ»Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠŸΡ€ΠΈΠΌΠ΅Ρ€
^Начало Π½Π° Ρ€Π΅Π΄grep "^error" β€” Ρ€Π΅Π΄ΠΎΠ²Π΅, Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‰ΠΈ с "error"
$ΠšΡ€Π°ΠΉ Π½Π° Ρ€Π΅Π΄grep "error$" β€” Ρ€Π΅Π΄ΠΎΠ²Π΅, Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Ρ‰ΠΈ с "error"
.ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π΅Π½ символgrep "err.r" β€” съвпада с "error", "errar" ΠΈ Π΄Ρ€.
*Нула ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ…ΠΎΠ΄Π½ΠΎΡ‚ΠΎgrep "err*" β€” "er", "err", "errr" ΠΈ Π΄Ρ€.
[abc]Клас ΠΎΡ‚ символиgrep "[aeiou]" β€” ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½Π° гласна
[^abc]ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»Π΅Π½ класgrep "[^0-9]" β€” ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π½Π΅Ρ†ΠΈΡ„Ρ€ΠΎΠ² символ
Π•ΠΊΡ€Π°Π½ΠΈΡ€Π°Π½Π΅ Π½Π° мСтасимволgrep "." β€” Π±ΡƒΠΊΠ²Π°Π»Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ°

Π’ BRE +, ?, {, }, (, ) ΠΈ | трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π΅ΠΊΡ€Π°Π½ΠΈΡ€Π°Π½ΠΈ с ΠΎΠ±Ρ€Π°Ρ‚Π½Π° Π½Π°ΠΊΠ»ΠΎΠ½Π΅Π½Π° Ρ‡Π΅Ρ€Ρ‚Π°, Π·Π° Π΄Π° сС Ρ‚Ρ€Π΅Ρ‚ΠΈΡ€Π°Ρ‚ ΠΊΠ°Ρ‚ΠΎ мСтасимволи. Π’ΠΎΠ²Π° Π΅ чСста ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π·Π° ΠΎΠ±ΡŠΡ€ΠΊΠ²Π°Π½Π΅ ΠΏΡ€ΠΈ ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ BRE ΠΈ ERE.

Π Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈ рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ (ERE) с -E

grep -E "error|failure|critical" application.log

ERE ΠΏΡ€Π°Π²ΠΈ синтаксиса ΠΏΠΎ-чист β€” +, ?, |, () ΠΈ {} работят Π±Π΅Π· ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΈ Π½Π°ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈ Ρ‡Π΅Ρ€Ρ‚ΠΈ:

grep -E "err(or|ata)?" application.log       # matches "err", "error", "errata"
grep -E "[0-9]{1,3}.[0-9]{1,3}" access.log  # partial IP pattern
grep -E "^(ERROR|WARN|FATAL)" app.log        # lines starting with severity levels

Perl-ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΈ рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ (PCRE) с -P

GNU grep ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° PCRE Ρ‡Ρ€Π΅Π· Ρ„Π»Π°Π³Π° -P, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π²Π°ΠΉΠΊΠΈ ΠΈΠ·ΠΏΡ€Π΅Π²Π°Ρ€Π²Π°Ρ‰ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, рСтроспСктивни ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ Π½Π΅ΠΆΠ°Π΄Π½ΠΈ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ:

grep -P "(?<=user=)w+" auth.log    # extract username after "user="
grep -P "d{4}-d{2}-d{2}" app.log # ISO date format

Π’Π°ΠΆΠ½ΠΎ: -P Π΅ GNU Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΈ Π½Π΅ Π΅ Π½Π°Π»ΠΈΡ‡Π½ΠΎ Π² BSD grep (стандартСн Π·Π° macOS). Π‘ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ²Π΅Ρ‚Π΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ΠΈ -P, Π½Π΅ са прСносими Π±Π΅Π· инсталиранС Π½Π° GNU grep (brew install grep Π·Π° macOS).

Π’ΡŠΡ€ΡΠ΅Π½Π΅ Π² компрСсирани Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ с zgrep

Ротацията Π½Π° ΠΆΡƒΡ€Π½Π°Π»ΠΈΡ‚Π΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ компрСсира ΠΏΠΎ-старитС ΠΆΡƒΡ€Π½Π°Π»ΠΈ с gzip. zgrep Π²ΠΈ позволява Π΄Π° Π³ΠΈ Ρ‚ΡŠΡ€ΡΠΈΡ‚Π΅ Π±Π΅Π· Ρ€ΡŠΡ‡Π½Π° дСкомпрСсия:

zgrep "error" /var/log/syslog.2.gz

Π—Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ .bz2 ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ bzgrep. Π—Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ .xz ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ xzgrep. Ако трябва Π΄Π° Ρ‚ΡŠΡ€ΡΠΈΡ‚Π΅ Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² компрСсирани ΠΈ нСкомпрСсирани ΠΆΡƒΡ€Π½Π°Π»ΠΈ с Π΅Π΄Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°:

zgrep -r "error" /var/log/

ΠšΡ€Π°Π΅Π½ случай: zgrep Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π° zcat Π·Π° дСкомпрСсия, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π°Π²Π° ΠΏΠΎ Ρ‚Ρ€ΡŠΠ±Π° към grep. Π’ΠΎΠΉ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° всички Ρ„Π»Π°Π³ΠΎΠ²Π΅ Π½Π° grep. Ако Π²ΠΈ трябват -P ΠΈΠ»ΠΈ -o Π²ΡŠΡ€Ρ…Ρƒ компрСсирани Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, дСкомпрСсирайтС ΠΏΡŠΡ€Π²ΠΎ към Π²Ρ€Π΅ΠΌΠ΅Π½Π΅Π½ Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ zcat file.gz | grep -P "pattern".

ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° grep с Π΄Ρ€ΡƒΠ³ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ

Π˜ΡΡ‚ΠΈΠ½ΡΠΊΠ°Ρ‚Π° ΠΌΠΎΡ‰ Π½Π° grep сС проявява, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π° с Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Ρ‡Ρ€Π΅Π· Ρ‚Ρ€ΡŠΠ±ΠΈ.

Π€ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π° ΠΎΡ‚ процСси

ps aux | grep "[n]ginx"

Π’Ρ€ΠΈΠΊΡŠΡ‚ със скобитС [n]ginx прСдотвратява появата Π½Π° самия процСс grep Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΡˆΠ°Π±Π»ΠΎΠ½ΡŠΡ‚ [n]ginx Π½Π΅ съвпада с буквалния Π½ΠΈΠ· [n]ginx Π² списъка с процСси.

Π˜Π·Π²Π»ΠΈΡ‡Π°Π½Π΅ ΠΈ ΠΎΠ±ΠΎΠ±Ρ‰Π°Π²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ ΠΆΡƒΡ€Π½Π°Π»ΠΈ

grep "error" application.log | sort | uniq -c | sort -rn | head -20

Π’Π°Π·ΠΈ Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄Π½Π° Π²Π΅Ρ€ΠΈΠ³Π°: Π½Π°ΠΌΠΈΡ€Π° всички Ρ€Π΅Π΄ΠΎΠ²Π΅ с Π³Ρ€Π΅ΡˆΠΊΠΈ, сортира Π³ΠΈ, Π±Ρ€ΠΎΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»Π½ΠΈΡ‚Π΅ срСщания, прСсортира ΠΏΠΎ чСстота Π² низходящ Ρ€Π΅Π΄ ΠΈ ΠΏΠΎΠΊΠ°Π·Π²Π° 20-Ρ‚Π΅ Π½Π°ΠΉ-чСсти Π³Ρ€Π΅ΡˆΠΊΠΈ. Π’ΠΎΠ²Π° Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° Π·Π° ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π΅Π½ Ρ‚Ρ€ΠΈΠ°ΠΆ ΠΏΡ€ΠΈ всСки производствСн ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚.

НамиранС Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ΠΈ шаблон, ΠΈ дСйствиС Π²ΡŠΡ€Ρ…Ρƒ тях

grep -rl "deprecated_function" /var/www/html/ | xargs sed -i 's/deprecated_function/new_function/g'

grep -rl изброява Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ΠΈ шаблона; xargs Π³ΠΈ ΠΏΡ€Π΅Π΄Π°Π²Π° Π½Π° sed Π·Π° замяна Π½Π° място. Π’ΠΈΠ½Π°Π³ΠΈ тСствайтС Π±Π΅Π· -i ΠΏΡŠΡ€Π²ΠΎ ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ -i.bak Π·Π° създаванС Π½Π° Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΈ копия.

Π’ΡŠΡ€ΡΠ΅Π½Π΅ ΠΏΡ€Π΅Π· SSH

ssh user@server "grep -r 'error' /var/log/app/" | less

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ grep Π½Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ ΠΈ Π΄Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Ρ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ към локалния си Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» β€” ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ с ΠΆΡƒΡ€Π½Π°Π»ΠΈ са Ρ‚Π²ΡŠΡ€Π΄Π΅ Π³ΠΎΠ»Π΅ΠΌΠΈ Π·Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅.

ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½Π΅ с awk Π·Π° структурСн Π°Π½Π°Π»ΠΈΠ·

grep "POST /api" access.log | awk '{print $1, $7, $9}'

grep Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π° Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½ΠΈΡ‚Π΅ Ρ€Π΅Π΄ΠΎΠ²Π΅; awk ΠΈΠ·Π²Π»ΠΈΡ‡Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π° (IP, URL, ΠΊΠΎΠ΄ Π½Π° статус). Π’Π°Π·ΠΈ комбинация ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° ΠΏΠΎ-голямата част ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅ Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° ΠΆΡƒΡ€Π½Π°Π»ΠΈ Π±Π΅Π· Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ спСциализирана ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Π·Π° Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΆΡƒΡ€Π½Π°Π»ΠΈ.

Π‘ΡŠΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ Π·Π° производитСлност

ΠŸΡ€ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈΠ»ΠΈ автоматизация с висока чСстота Ρ‚Π΅Π·ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠΌΠ°Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

  • Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ -F Π·Π° Π±ΡƒΠΊΠ²Π°Π»Π½ΠΈ Π½ΠΈΠ·ΠΎΠ²Π΅. grep -F "exact string" заобикаля изцяло ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ ΠΈ Π΅ ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠΌΠΎ ΠΏΠΎ-Π±ΡŠΡ€Π·.
  • Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ LC_ALL=C. Π—Π°Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° LC_ALL=C grep "pattern" file Π½Π°Π»Π°Π³Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° с Π΅Π΄Π½ΠΎ-Π±Π°ΠΉΡ‚ΠΎΠ²Π° локализация, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС 2–5 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ ΠΏΡ€ΠΈ UTF-8 Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ пропуска ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²ΠΈ символи.
  • Π˜Π·Π±ΡΠ³Π²Π°ΠΉΡ‚Π΅ -r Π²ΡŠΡ€Ρ…Ρƒ ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΎ ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈ систСми. РСкурсивният grep Π²ΡŠΡ€Ρ…Ρƒ NFS ΠΈΠ»ΠΈ CIFS ΠΌΠΎΠΆΠ΅ Π΄Π° насити мрСТовия I/O. ВмСсто Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ find с -exec ΠΈ ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΏΡŠΡ‚Ρ.
  • Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ --mmap Π² Linux. grep --mmap ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° I/O с ΠΏΠ°ΠΌΠ΅Ρ‚-ζ˜ ε°„ вмСсто систСмни извиквания read(), ΠΊΠΎΠ΅Ρ‚ΠΎ намалява Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ ΠΏΡ€ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ (Π½Π΅ Π΅ Π½Π°Π»ΠΈΡ‡Π½ΠΎ Π½Π° всички ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ).
  • ΠŸΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΠΈΡ€Π°ΠΉΡ‚Π΅ с xargs -P. Π—Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π² ΠΌΠ½ΠΎΠ³ΠΎ нСзависими Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Ρ‚Π΅ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ:
find /var/log -name "*.log" | xargs -P 4 grep -l "error"

Π’ΠΎΠ²Π° изпълнява 4 процСса grep ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ мноТСство CPU ядра.

grep срСщу Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ инструмСнти Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ ΠΏΡ€ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈΠ‘ΠΏΠ°Π·Π²Π° `.gitignore`Най-подходящ Π·Π°
grepΠ£ΠΌΠ΅Ρ€Π΅Π½Π°BRE/ERE/PCREНСБистСмни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΆΡƒΡ€Π½Π°Π»ΠΈ, скриптиранС
ripgrep (rg)Много Π±ΡŠΡ€Π·Π°PCRE2Π”Π°Π’ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° ΠΊΠΎΠ΄ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°
ag (Silver Searcher)Π‘ΡŠΡ€Π·Π°PCREΠ”Π°Π’ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° ΠΊΠΎΠ΄, ΠΏΠΎ-стара Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° Π½Π° rg
ackΠ£ΠΌΠ΅Ρ€Π΅Π½Π°PCREΠ§Π°ΡΡ‚ΠΈΡ‡Π½ΠΎΠšΠΎΠ΄ΠΎΠ²ΠΈ Π±Π°Π·ΠΈ, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΈ към Perl
fgrep / grep -FНай-Π±ΡŠΡ€Π·Π°ΠΡΠΌΠ° (само Π±ΡƒΠΊΠ²Π°Π»Π½ΠΈ Π½ΠΈΠ·ΠΎΠ²Π΅)НСБканиранС Π½Π° ΠΆΡƒΡ€Π½Π°Π»ΠΈ с фиксирани Π½ΠΈΠ·ΠΎΠ²Π΅

Π—Π° Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ систСмна администрация β€” сканиранС Π½Π° /var/log, /etc ΠΈΠ»ΠΈ ΠΈΠ·Ρ…ΠΎΠ΄ ΠΎΡ‚ ΠΆΠΈΠ²ΠΈ процСси β€” grep остава правилният инструмСнт, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π΅ унивСрсално Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ Π±Π΅Π· инсталация. Π—Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π² ΠΊΠΎΠ΄ΠΎΠ²ΠΈ Π±Π°Π·ΠΈ Π½Π° прилоТСния ripgrep Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎ-Π±ΡŠΡ€Π· ΠΈ ΠΏΠΎ-Π΅Ρ€Π³ΠΎΠ½ΠΎΠΌΠΈΡ‡Π΅Π½.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ Ρ€Π΅Π°Π»Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ процСси

ΠžΠ΄ΠΈΡ‚ Π½Π° Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΈ SSH влизания

grep -i "failed password" /var/log/auth.log | grep -oP "from K[d.]+" | sort | uniq -c | sort -rn | head -10

Π’ΠΎΠ²Π° ΠΈΠ·Π²Π»ΠΈΡ‡Π° изходния IP Π½Π° всСки Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ΅Π½ ΠΎΠΏΠΈΡ‚ Π·Π° SSH Π²Π»ΠΈΠ·Π°Π½Π΅ ΠΈ Π³ΠΈ класира ΠΏΠΎ чСстота β€” ΠΏΡŠΡ€Π²Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° ΠΏΡ€ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ Π½Π° Π³Ρ€ΡƒΠ±Π° сила ΠΏΡ€Π΅Π΄ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π½Π°Ρ‚Π° стСна.

НамиранС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π² конфигурацията ΠΏΡ€Π΅Π΄ΠΈ рСстартиранС Π½Π° услуга

grep -rn "listens*443" /etc/nginx/

ΠŸΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π°Π²Π° ΠΊΠΎΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° Nginx Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‚ HTTPS ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΠΈ. ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°ΠΉΡ‚Π΅ с Π²Π°ΡˆΠ°Ρ‚Π° настройка Π½Π° SSL сСртификати, Π·Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π΄Π°Π»ΠΈ ΠΏΡŠΡ‚ΠΈΡ‰Π°Ρ‚Π° Π΄ΠΎ сСртификатитС, посочСни Π² Ρ‚Π΅Π·ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, дСйствитСлно ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚.

НаблюдСниС Π½Π° Ρ„Π°ΠΉΠ» с ΠΆΡƒΡ€Π½Π°Π» Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅

tail -f /var/log/app/production.log | grep --line-buffered "ERROR"

--line-buffered ΠΏΡ€ΠΈΠ½ΡƒΠΆΠ΄Π°Π²Π° grep Π΄Π° изчиства ΠΈΠ·Ρ…ΠΎΠ΄Π° слСд всСки Ρ€Π΅Π΄ вмСсто Π΄Π° Π³ΠΎ Π±ΡƒΡ„Π΅Ρ€ΠΈΡ€Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΠΎΡ‚ ΡΡŠΡ‰Π΅ΡΡ‚Π²Π΅Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ ΠΏΠΎ Ρ‚Ρ€ΡŠΠ±Π° ΠΎΡ‚ tail -f. Π‘Π΅Π· Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅ никакъв ΠΈΠ·Ρ…ΠΎΠ΄ Π² ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΌΠΈΠ½ΡƒΡ‚ΠΈ, Π΄ΠΎΡ€ΠΈ ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС срСщат съвпадСния.

Π’Π°Π»ΠΈΠ΄ΠΈΡ€Π°Π½Π΅ Π½Π° Π²Π½Π΅Π΄Ρ€Π΅Π½Π° конфигурация

grep -c "server_name" /etc/nginx/sites-enabled/* | grep -v ":0"

Π˜Π·Π±Ρ€ΠΎΡΠ²Π° всСки Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ сайт Π½Π° Nginx, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠΌΠ° ΠΏΠΎΠ½Π΅ Π΅Π΄Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° server_name β€” Π±ΡŠΡ€Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π·Π΄Ρ€Π°Π²ΠΈΠ½Π° слСд внСдряванС Π½Π° Π½ΠΎΠ² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π΅Π½ хост Π² срСда Π·Π° VPS хостинг.

Π˜Π·Π²Π»ΠΈΡ‡Π°Π½Π΅ Π½Π° ΠΈΠΌΠ΅ΠΉΠ» адрСси ΠΎΡ‚ Ρ„Π°ΠΉΠ»

grep -Eo "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}" contacts.txt

Π€Π»Π°Π³ΡŠΡ‚ -o Π² комбинация с ERE шаблон ΠΈΠ·Π²Π»ΠΈΡ‡Π° само ΡΡŠΠ²ΠΏΠ°Π΄Π°Ρ‰ΠΈΡ‚Π΅ ΠΈΠΌΠ΅ΠΉΠ» адрСси, ΠΏΠΎ Π΅Π΄ΠΈΠ½ Π½Π° Ρ€Π΅Π΄, Π³ΠΎΡ‚ΠΎΠ²ΠΈ Π·Π° ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΡˆΠ½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.

Π’ΡŠΡ€ΡΠ΅Π½Π΅ Π² ΠΆΡƒΡ€Π½Π°Π»ΠΈ Π½Π° прилоТСния Π½Π° мноТСство ΡΡŠΡ€Π²ΡŠΡ€ΠΈ

На Dedicated ΡΡŠΡ€Π²ΡŠΡ€, ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‰ мноТСство инстанции Π½Π° прилоТСния, ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΡΡ‚Π΅ ΠΆΡƒΡ€Π½Π°Π»ΠΈ ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ:

grep -rh --include="*.log" "transaction_id=abc123" /var/log/app1/ /var/log/app2/ /var/log/app3/

-h потиска ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΈΠ·Ρ…ΠΎΠ΄ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΡ€Π΅Π΄Π°Π΄Π΅Π½ ΠΏΠΎ Ρ‚Ρ€ΡŠΠ±Π° чисто към ΠΈΠ·Π³Π»Π΅Π΄, сортиран ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ ΠΊΠ»Π΅ΠΉΠΌΠ°.

ЧСсти Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΈ ΠΈΠ·Π±Π΅Π³Π½Π΅Ρ‚Π΅

ЗабравянС Π΄Π° сС поставят ΠΊΠ°Π²ΠΈΡ‡ΠΊΠΈ ΠΎΠΊΠΎΠ»ΠΎ шаблони с ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ:

# Wrong β€” shell splits "connection refused" into two arguments
grep connection refused /var/log/syslog

# Correct
grep "connection refused" /var/log/syslog

ИзползванС Π½Π° BRE синтаксис, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ERE:

# Wrong in BRE β€” + is literal
grep "error+" app.log

# Correct β€” use -E or escape in BRE
grep -E "error+" app.log
grep "error+" app.log

РСкурсивното Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ засяга Π΄Π²ΠΎΠΈΡ‡Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅:

# Produces "Binary file matches" noise
grep -r "config" /usr/

# Correct β€” skip binary files
grep -r --binary-files=without-match "config" /usr/
# or equivalently
grep -rI "config" /usr/

ΠžΠ±ΡŠΡ€ΠΊΠ²Π°Π½Π΅ с ΠΊΠΎΡ‚Π²ΠΈΡ‚Π΅ β€” ^ Π²ΡŠΡ‚Ρ€Π΅ Π² клас ΠΎΡ‚ символи:

[^abc] ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° "Π½Π΅ a, b ΠΈΠ»ΠΈ c." ^ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° "Π½Π°Ρ‡Π°Π»ΠΎ Π½Π° Ρ€Π΅Π΄" само ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС появява Π² самото Π½Π°Ρ‡Π°Π»ΠΎ Π½Π° шаблона, извън скобитС.

ΠšΠ»ΡŽΡ‡ΠΎΠ²ΠΈ ΠΈΠ·Π²ΠΎΠ΄ΠΈ ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Π·Π° Π²Π·Π΅ΠΌΠ°Π½Π΅ Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Π½ списък ΠΏΡ€ΠΈ конструиранС Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° grep:

  • Π‘ΡƒΠΊΠ²Π°Π»Π΅Π½ Π½ΠΈΠ·, Π±Π΅Π· Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ рСгулярСн ΠΈΠ·Ρ€Π°Π·? Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ -F Π·Π° максимална скорост.
  • НСизвСстСн Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ Π² цСлСвия Ρ„Π°ΠΉΠ»? Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ -i.
  • Врябва Π΄Π° Π·Π½Π°Π΅Ρ‚Π΅ къдС Π² Ρ„Π°ΠΉΠ»Π° Π΅ ΡΡŠΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ? Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ -n.
  • Π’ΡŠΡ€ΡΠ΅Π½Π΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎ Π΄ΡŠΡ€Π²ΠΎ? Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ -r --include="*.ext" Π·Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ.
  • Голям Ρ„Π°ΠΉΠ», трябва само Π΄Π° ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄ΠΈΡ‚Π΅ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅? Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ -m 1 ΠΈ grep ΠΈΠ·Π»ΠΈΠ·Π° слСд ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ съвпадСниС.
  • НуТСн Π΅ заобикалящ контСкст Π·Π° диагностика? Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ -C 3.
  • Π¨Π°Π±Π»ΠΎΠ½ΡŠΡ‚ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° мСтасимволи Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π°? ΠŸΠΎΡΡ‚Π°Π²Π΅Ρ‚Π΅ шаблона Π² Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΈ ΠΊΠ°Π²ΠΈΡ‡ΠΊΠΈ: grep '$variable'.
  • Π’ΡŠΡ€ΡΠ΅Π½Π΅ Π² компрСсирани ΠΆΡƒΡ€Π½Π°Π»ΠΈ? Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ zgrep ΠΈΠ»ΠΈ zcat file.gz | grep.
  • НуТно Π΅ Ρ€Π΅Π΄ΡƒΠ²Π°Π½Π΅ ΠΈΠ»ΠΈ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ +/?? Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ -E Π·Π° ERE.
  • НуТни са ΠΈΠ·ΠΏΡ€Π΅Π²Π°Ρ€Π²Π°Ρ‰ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈΠ»ΠΈ Π½Π΅ΠΆΠ°Π΄Π½ΠΎ съвпадСниС? Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ -P Π·Π° PCRE (само GNU grep).
  • Π˜Π·Π²Π»ΠΈΡ‡Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ ΡΡŠΠ²ΠΏΠ°Π΄Π°Ρ‰ тСкст, Π½Π΅ Ρ†Π΅Π»ΠΈ Ρ€Π΅Π΄ΠΎΠ²Π΅? Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ -o.
  • Π’ΡŠΡ€ΡΠ΅Π½Π΅ Π² ΠΊΠΎΠ΄ΠΎΠ²Π° Π±Π°Π·Π°, Π° Π½Π΅ Π² систСмни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅? ΠžΠ±ΠΌΠΈΡΠ»Π΅Ρ‚Π΅ ripgrep вмСсто Ρ‚ΠΎΠ²Π°.

ΠŸΡ€ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π½Π° инфраструктура β€” нСзависимо Π΄Π°Π»ΠΈ Π½Π° VPS с cPanel ΠΈΠ»ΠΈ Π² чиста Linux срСда β€” grep Π΅ ΠΏΡŠΡ€Π²ΠΈΡΡ‚ инструмСнт, към ΠΊΠΎΠΉΡ‚ΠΎ посягатС, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½Π΅Ρ‰ΠΎ сС счупи. УсвояванСто Π½Π° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈΡ‚Π΅ ΠΎΡ‚ Ρ„Π»Π°Π³ΠΎΠ²Π΅ ΠΈ ΡΡŠΡΡ‚Π°Π²ΠΈΠΌΠΎΡΡ‚Ρ‚Π° ΠΌΡƒ с awk, sed, sort ΠΈ xargs ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ ΠΆΡƒΡ€Π½Π°Π»ΠΈ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌΠ° диагностична информация Π·Π° сСкунди.

Π—Π° срСди, Π² ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ΅ΠΉΠ» хостинг ΠΈΠ»ΠΈ ΡƒΠ΅Π± прилоТСния Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚ структурирани ΠΆΡƒΡ€Π½Π°Π»ΠΈ с голям ΠΎΠ±Π΅ΠΌ, ΡΡŠΡ‡Π΅Ρ‚Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° grep с Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄ Π·Π° Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΆΡƒΡ€Π½Π°Π»ΠΈ (ELK стСк, Loki ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ) Π΅ СстСствСната слСдваща ΡΡ‚ΡŠΠΏΠΊΠ° β€” Π½ΠΎ grep остава рСзСрвният Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ навсякъдС, Π²ΠΈΠ½Π°Π³ΠΈ, Π±Π΅Π· зависимости.

ЧСсто Π·Π°Π΄Π°Π²Π°Π½ΠΈ Π²ΡŠΠΏΡ€ΠΎΡΠΈ

Каква Π΅ Ρ€Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ grep, egrep ΠΈ fgrep?

grep ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° основни рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅. egrep Π΅ Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π΅Π½ Π½Π° grep -E ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈ рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ, ΠΏΡ€ΠΈ ΠΊΠΎΠΈΡ‚ΠΎ +, ?, | ΠΈ () работят Π±Π΅Π· ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΈ Π½Π°ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈ Ρ‡Π΅Ρ€Ρ‚ΠΈ. fgrep Π΅ Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π΅Π½ Π½Π° grep -F ΠΈ Ρ‚Ρ€Π΅Ρ‚ΠΈΡ€Π° шаблона ΠΊΠ°Ρ‚ΠΎ фиксиран Π±ΡƒΠΊΠ²Π°Π»Π΅Π½ Π½ΠΈΠ· Π±Π΅Π· интСрпрСтация Π½Π° рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π³ΠΎ ΠΏΡ€Π°Π²ΠΈ Π½Π°ΠΉ-Π±ΡŠΡ€Π·ΠΈΡ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. И egrep, ΠΈ fgrep са остарСли псСвдоними; ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ grep -E ΠΈ grep -F Π² скриптовС.

Π—Π°Ρ‰ΠΎ grep -r понякога Π²Ρ€ΡŠΡ‰Π° "Binary file matches"?

grep ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π° Π΄Π²ΠΎΠΈΡ‡Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Ρ‡Ρ€Π΅Π· сканиранС Π·Π° Π½ΡƒΠ»Π΅Π²ΠΈ Π±Π°ΠΉΡ‚ΠΎΠ²Π΅. ΠšΠΎΠ³Π°Ρ‚ΠΎ Π½Π°ΠΌΠ΅Ρ€ΠΈ съвпадСниС Π² Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ счита Π·Π° Π΄Π²ΠΎΠΈΡ‡Π΅Π½ Ρ„Π°ΠΉΠ», ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚Π²Π° Ρ‚ΠΎΠ²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ вмСсто ΡΡŠΠ²ΠΏΠ°Π΄Π°Ρ‰ΠΈΡ Ρ€Π΅Π΄. ΠŸΠΎΡ‚ΠΈΡΠ½Π΅Ρ‚Π΅ Π΄Π²ΠΎΠΈΡ‡Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ с grep -rI (Π³Π»Π°Π²Π½ΠΎ I) ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ½ΡƒΠ΄Π΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π² тСкстов Ρ€Π΅ΠΆΠΈΠΌ с grep -ra (Ρ‚Ρ€Π΅Ρ‚ΠΈΡ€Π°ΠΉΡ‚Π΅ всички Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΊΠ°Ρ‚ΠΎ тСкст). Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ -I Π² производствСна срСда, Π·Π° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅Ρ‚Π΅ ΠΈΠ·ΠΊΡ€ΠΈΠ²Π΅Π½ ΠΈΠ·Ρ…ΠΎΠ΄ ΠΎΡ‚ случайно съвпадСниС Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ ΠΈΠ»ΠΈ компрСсирани Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅.

Как Π΄Π° Ρ‚ΡŠΡ€ΡΡ шаблон, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ Π½Π°ΠΊΠ»ΠΎΠ½Π΅Π½Π° Ρ‡Π΅Ρ€Ρ‚Π° Π½Π°ΠΏΡ€Π΅Π΄?

НаклонСнитС Ρ‡Π΅Ρ€Ρ‚ΠΈ Π½Π°ΠΏΡ€Π΅Π΄ нямат спСциално Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΡ‚Π΅ Π½Π° grep (Π·Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ sed ΠΈΠ»ΠΈ awk). ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π±ΡƒΠΊΠ²Π°Π»Π½ΠΎ: grep "var/log" /etc/logrotate.conf. НС сС изисква Π΅ΠΊΡ€Π°Π½ΠΈΡ€Π°Π½Π΅.

Какъв Π΅ Π½Π°ΠΉ-Π±ΡŠΡ€Π·ΠΈΡΡ‚ Π½Π°Ρ‡ΠΈΠ½ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π΄Π°Π»ΠΈ Π΄Π°Π΄Π΅Π½ Π½ΠΈΠ· ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° някъдС Π² голям Ρ„Π°ΠΉΠ»?

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ grep -qF "string" file && echo "found". Π€Π»Π°Π³ΡŠΡ‚ -q потиска цСлия ΠΈΠ·Ρ…ΠΎΠ΄ ΠΈ ΠΈΠ·Π»ΠΈΠ·Π° със статус 0 ΠΏΡ€ΠΈ ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ съвпадСниС, 1 Π°ΠΊΠΎ няма съвпадСниС. Π€Π»Π°Π³ΡŠΡ‚ -F Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ. ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ, grep Ρ‡Π΅Ρ‚Π΅ само Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΎΡ‚ Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΈ ΠΈΠ·Π»ΠΈΠ·Π° Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ β€” ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ Π·Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π½Π° Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚ΠΈΡ‚Π΅.

МоТС Π»ΠΈ grep Π΄Π° Ρ‚ΡŠΡ€ΡΠΈ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π±Π΅Π· Π΄Π° Π³ΠΈ ΠΊΠΎΠΏΠΈΡ€Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎ?

Π”Π°. ΠŸΡ€Π΅Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎ Ρ‚Ρ€ΡŠΠ±Π° ΠΏΡ€Π΅Π· SSH: ssh user@host "grep -r 'pattern' /var/log/". Π’ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ сС изпълнява Π½Π° отдалСчСния хост ΠΈ само ΡΡŠΠ²ΠΏΠ°Π΄Π°Ρ‰ΠΈΡ‚Π΅ Ρ€Π΅Π΄ΠΎΠ²Π΅ сС ΠΏΡ€Π΅Π΄Π°Π²Π°Ρ‚ ΠΏΠΎ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°. Π—Π° повтарящи сС Ρ‚ΡŠΡ€ΡΠ΅Π½ΠΈΡ обмислСтС ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½Π°Ρ‚Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π° систСма с sshfs ΠΈ изпълнСниС Π½Π° grep Π»ΠΎΠΊΠ°Π»Π½ΠΎ, ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° рСгистриранС, Π°ΠΊΠΎ ΠΎΠ±Π΅ΠΌΡŠΡ‚ ΠΎΠΏΡ€Π°Π²Π΄Π°Π²Π° инфраструктурата.