grep

30 примеров Grep

30 примеров Grep
Вы можете найти grep глубоко в животном мозгу Unix и Unix-подобных операционных систем. Это базовая программа, используемая для сопоставления с образцом, она была написана в 70-х вместе с остальной частью инструмента UNIX, который мы знаем и любим (или ненавидим).

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

Примеры, которые удобны и сделают вашу жизнь немного проще. Вот 30 таких распространенных вариантов использования и параметров grep.

1. ps aux | grep

Ps aux перечисляет все процессы и связанные с ними pid. Но часто этот список слишком длинный, чтобы человек мог его изучить. Отправляя вывод в команду grep, вы можете перечислить процессы, запущенные с очень конкретным приложением. Например, может быть sshd, nginx или httpd.

# ps aux | grep sshd
корень 400 0.0 0.2 69944 5624 ?       СС 17:47 0:00 / usr / sbin / sshd -D
корень 1076 0.2 0.3 95204 6816 ?       Сс 18:29 0:00 sshd: root @ pts / 0
корень 1093 0.0 0.0 12784932 балла / 0 S + 18:29 0:00 grep sshd

2. Получение ваших IP-адресов

В большинстве операционных систем вы можете перечислить все свои сетевые интерфейсы и IP-адрес, назначенный этому интерфейсу, используя команду ifconfig или ip addr. Обе эти команды выведут много дополнительной информации. Но если вы хотите распечатать только IP-адрес (например, для сценариев оболочки), вы можете использовать следующую команду:

$ ip addr | grep inet | awk 'print $ 2; '
$ ip addr | grep -w inet | awk 'print $ 2; '# Для строк только с inet, а не с inet6 (IPv6)

Команда ip addr получает всю информацию (включая IP-адреса), затем она передается второй команде grep inet, которая выводит только строки с inet в них. Затем это передается в awk print оператор, который печатает второе слово в каждой строке (проще говоря).

п.S: Вы также можете сделать это без grep, если вы хорошо знаете awk.

3. Просмотр неудачных попыток SSH

Если у вас есть сервер с выходом в Интернет с общедоступным IP-адресом, он будет постоянно подвергаться атакам SSH, и если вы разрешите пользователям иметь доступ к SSH на основе пароля (политика, которую я бы не рекомендовал), вы можете увидеть все такие неудачные попытки, используя следующая команда grep:

# cat / var / log / auth.журнал | grep «Ошибка»
Вывод образца
5 декабря, 16:20:03 debian sshd [509]: неверный пароль для root от 192.168.0.100 порт 52374 ssh2
5 декабря 16:20:07 debian sshd [509]: неверный пароль для root от 192.168.0.100 порт 52374 ssh2
5 декабря 16:20:11 debian sshd [509]: неверный пароль для root от 192.168.0.100 порт 52374 ssh2

4. Подключение Grep к Uniq

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

# cat / var / log / auth.журнал | grep "Ошибка" | uniq -f 3

Команда uniq должна печатать только уникальные строки. Uniq -f 3 пропускает первые три поля (чтобы пропустить временные метки, которые никогда не повторяются), а затем начинает поиск уникальных строк.

5. Grepping для сообщений об ошибках

Использование Grep для доступа и журналов ошибок не ограничивается только SSH. Веб-серверы (например, Nginx) очень тщательно регистрируют ошибки и получают доступ к журналам. Если вы настроили сценарии мониторинга, которые отправляют вам предупреждения, когда grep «404» возвращает новое значение. Это может быть весьма полезно.

# grep -w "404" / var / www / nginx / access.бревно
192.168.0.100 - - [06 / Dec / 2018: 02: 20: 29 +0530] "GET / favicon.ico HTTP / 1.1 "404 200
"http: // 192.168.0.102 / "" Mozilla / 5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit / 537.36 (KHTML, например, Gecko) Chrome / 70.0.3538.110 Safari / 537.36 "
192.168.0.101 - - [06 / Dec / 2018: 02: 45: 16 +0530] "GET / favicon.ico HTTP / 1.1 "404 143
"http: // 192.168.0.102 / "" Mozilla / 5.0 (iPad; CPU OS 12_1, например Mac OS X)
AppleWebKit / 605.1.15 (KHTML, например, Gecko) Версия / 12.0 для мобильных устройств / 15E148 Safari / 604.1 "

Регулярным выражением может быть не «404», а другая фильтрация регулярных выражений только для мобильных клиентов или только для устройств Apple, просматривающих веб-страницу. Это позволяет вам глубже понять, как работает ваше приложение.

6. Список пакетов

Для систем на основе Debian dpkg -l перечисляет все пакеты, установленные в вашей системе. Вы можете передать это в команду grep для поиска пакетов, принадлежащих определенному приложению. Например:

# dpkg -l | grep "vim"

7. grep -v fileNames

Чтобы перечислить все строки, которые не содержать заданный шаблон, используйте флаг -v. Это в основном противоположность обычной команды grep.

8. grep -l

В нем перечислены все файлы, содержащие хотя бы одно вхождение предоставленного шаблона. Это полезно, когда вы ищете шаблон внутри каталога с несколькими файлами. Он печатает только имя файла, а не конкретную строку с шаблоном.

9. Параметр одиночного слова -w

$ grep -w fileNames

Флаг -w указывает grep искать данный шаблон как целое слово, а не только подстроку строки. Например, ранее мы искали IP-адрес и шаблон инет напечатал строки с обоими инет а также inet6 перечисление адресов IPv4 и IPv6. Но если бы мы использовали флаг -w только строки с инет поскольку слово, которому предшествуют и за которым следуют пробелы, является допустимым совпадением.

10. Расширенное регулярное выражение

Вы часто обнаруживаете, что регулярные выражения, родные для Grep, немного ограничивают. В большинстве сценариев и инструкций вы найдете использование флага -E, который позволит вам ввести шаблон в так называемом расширенном режиме.

Вот команды grep и grep -E для поиска слов Супермен и Человек-паук.

Текст $ grep "\ (Супер | Паук \) человек"
$ grep -E Текст "(Супер | Человек-паук)"

Как видите, расширенную версию читать намного проще.

11. Grep для ваших контейнеров

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

$ docker ps | grep [imageName]

12. Grep для ваших стручков

Пока мы говорим о контейнерах. Kubernetes часто запускает несколько модулей в рамках одного развертывания. Хотя каждый модуль имеет уникальное имя, в данном пространстве имен они начинаются с имени развертывания, обычно. Мы можем найти это и перечислить все модули, связанные с данным развертыванием.

$ kubectl получить капсулы | grep

13. Grep для больших данных

Часто так называемый анализ «больших данных» включает простой поиск, сортировку и подсчет шаблонов в заданном наборе данных. Утилиты UNIX низкого уровня, такие как grep, uniq, wc, особенно хороши в этом. Этот Сообщение блога показывает хороший пример задачи, выполненной за считанные секунды с использованием grep и других утилит Unix, в то время как Hadoop занял почти полчаса.

Например, это набор данных больше 1.7 ГБ размером. Он содержит информацию о множестве шахматных матчей, включая сделанные ходы, кто выиграл и т. Д. Нас интересуют только результаты, поэтому мы запускаем следующую команду:

$ grep "Результат" миллионная база-2.22.pgn | сортировать | uniq -c
221 [Результат "*"]
653728 [Результат "0-1"]
852305 [Результат "1-0"]
690934 [Результат "1 / 2-1 / 2"]

Это заняло около 15 секунд на 2-ядерном / 4-поточном процессоре 4-летней давности. Итак, в следующий раз, когда вы будете решать проблему «больших данных». Подумайте, можете ли вы вместо этого использовать grep.

14. grep -color = авто

Эта опция позволяет grep выделять шаблон внутри строки, где он был найден.

15. grep -i

Сопоставление с шаблоном grep по своей сути чувствительно к регистру. Но если вас это не волнует, то использование флага -i сделает grep нечувствительным к регистру.

16. grep -n

Флаг -n покажет номера строк, поэтому вам не нужно беспокоиться о том, чтобы позже найти ту же строку.

17. git grep

Git, система контроля версий, сама имеет встроенную команду grep, которая работает почти так же, как ваш обычный grep. Но его можно использовать для поиска шаблонов в любом зафиксированном дереве с использованием собственного интерфейса командной строки git вместо утомительных каналов. Например, если вы находитесь в главной ветке своего репо, вы можете использовать grep для репо, используя:

(мастер) $ git grep

18. grep -o

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

19. grep -x

Флаг -x будет печатать строку тогда и только тогда, когда вся строка соответствует вашему предоставленному регулярному выражению. Это несколько похоже на флаг -w, который печатал строку, если и только целое слово соответствовало предоставленному регулярному выражению.

20. grep -T

При работе с журналами и выводами сценариев оболочки вы более чем вероятно столкнетесь с жесткими вкладками, чтобы различать разные столбцы вывода. Флаг -T аккуратно выровняет эти вкладки, чтобы столбцы были аккуратно расположены, что делает вывод удобочитаемым.

21 год. grep -q

Это подавляет вывод и незаметно запускает команду grep. Очень полезно при замене текста или запуске grep в сценарии демона.

22. grep -P

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

23. grep -D [ДЕЙСТВИЕ]

В Unix почти все можно рассматривать как файл. Следовательно, в grep можно передать любое устройство, сокет или поток данных FIFO. Вы можете использовать флаг -D, за которым следует ДЕЙСТВИЕ (действие по умолчанию - ЧИТАТЬ). Еще несколько вариантов: ПРОПУСТИТЬ, чтобы пропустить определенные устройства, и РЕКУРС, чтобы рекурсивно просматривать каталоги и символические ссылки.

24. Репетиция

Если вы ищете данный шаблон, который является повторением известного более простого шаблона, используйте фигурные скобки, чтобы указать количество повторений

$ grep -E «[0-9] 10»

Это печатает строки, содержащие строки длиной 10 или более цифр.

25. Сокращения повторения

Некоторые специальные символы зарезервированы для определенного типа повторения шаблона. Вы можете использовать их вместо фигурных скобок, если они вам подходят.

? : Шаблон перед вопросительным знаком должен соответствовать нулю или один раз.

*: Шаблон перед звездочкой должен совпадать ноль или более раз.

+ : Шаблон перед плюсом должен совпадать один или несколько раз.

25. Байтовые смещения

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

$ grep -b -o [имя файла]

Смещение просто означает, через сколько байтов от начала файла начинается соответствующая строка.

26 год. egrep, fgrep и rgerp

Вы часто будете видеть вызов egrep, чтобы использовать расширенный синтаксис регулярных выражений, который мы обсуждали ранее. Однако это устаревший синтаксис, и рекомендуется избегать его использования. Вместо этого используйте grep -E. Точно так же используйте grep -F вместо fgrep и grep -r вместо rgrep.

27. grep -z

Иногда ввод в grep - это не строки, заканчивающиеся символом новой строки. Например, если вы обрабатываете список имен файлов, они могут поступать из разных источников. Флаг -z указывает grep рассматривать символ NULL как конец строки. Это позволяет рассматривать входящий поток как любой обычный текстовый файл.

28 год. grep -a [имя файла]

Флаг -a указывает grep обрабатывать предоставленный файл как обычный текст. Файл может быть двоичным, но grep будет обрабатывать его содержимое, как если бы оно было текстом.

29. grep -U [имя файла]

Флаг -U указывает grep обрабатывать предоставленные файлы, как если бы они были двоичными, а не текстовыми. По умолчанию grep угадывает тип файла, глядя на первые несколько байтов. Использование этого флага отменяет предположения.

30. grep -m ЧИСЛО

С большими файлами поиск выражения может длиться бесконечно. Однако, если вы хотите проверить только первые числа совпадений, вы можете использовать флаг -m для этого. Это быстрее, и выход часто управляем.

Заключение

Большая часть повседневной работы системного администратора связана с просмотром больших объемов текста. Это могут быть журналы безопасности, журналы с вашего веб-сервера или почтового сервера, активность пользователей или даже большой текст страниц руководства. Grep дает вам дополнительную гибкость при работе с этими вариантами использования.

Надеюсь, несколько приведенных выше примеров и вариантов использования помогли вам лучше понять эту живую окаменелость программного обеспечения.

Контроль и управление перемещением мыши между несколькими мониторами в Windows 10
Диспетчер мыши с двумя дисплеями позволяет контролировать и настраивать движение мыши между несколькими мониторами, замедляя ее движения возле границы...
WinMouse позволяет настраивать и улучшать движение указателя мыши на ПК с Windows
Если вы хотите улучшить функции указателя мыши по умолчанию, используйте бесплатное ПО WinMouse. Он добавляет дополнительные функции, которые помогут ...
Левая кнопка мыши не работает в Windows 10
Если вы используете выделенную мышь со своим ноутбуком или настольным компьютером, но левая кнопка мыши не работает в Windows 10/8/7 по какой-то причи...