7. Команда grep: поиск по файлам и папкам

Grep поиск или поиск в комбинации с потоками.

Grep это вполне возможно самая популярная из существующих команд в Unix/Linux. Многие бы с этим поспорили, но стоит начать использовать grep, эта команда будет присутствовать почти во всех ваших скриптах для консоли Linux. grep расшифровывается, как global regular expression printer‘.

GREP — утилита командной строки, которая находит на вводе строки, отвечающие заданному регулярному выражению, и выводит их, если вывод не отменён специальным ключом.

Иными словами grep вырезает нужные вам строки из текстовых файлов которые содержат указанный пользователем текст. Grep может быть использован двумя путями — сам по себе или в комбинации с потоками.

Cинтаксис команды:

grep 'word' filename

grep 'word' file1 file2 file3

grep 'string1 string2'  filename

cat otherfile | grep 'something'

command | grep 'something'

command option1 | grep 'data'

grep --color 'data' fileName

Использование grep в чистом виде(поиск в файлах):

grep '12:00' /var/log/backup/log.txt

 grep 'mod' /root/base.txt             #Поиск в файле упоминания о "mod"
 
grep '12:00' /var/log/backup/log.txt #Поиск в файле упоминания о событии в "12:00"

Показанная выше команда производит поиск подстроки 12.00 в файле /root/base.txt и отображает все строки где эта подстрока встречается. Расширение файла может быть другим(.html, .php)

Чтобы выполнить поиск пользователя boo в файле /etc/passwd запустите:

 grep 'root' /etc/passwd #Поиск в файле паролей пользователя root

Вывод команды: 

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

По умолчанию  grep  использует поиск чувствительный к PeГиСTрУ!

Для поиска без учета регистра нужно указать ключ -i  :

 grep -i 'user' /root/base.txt #Поиск в файле без учета регистра(Найдет и user и User и users)

Для того чтобы найти только полные  вхождения слова "user" :

 grep -iw 'user' /root/base.txt #Поиск в файле без учета регистра(Найдет только user и USER)

Также для удобства вывода можно подсветить № строки,  где есть вхождение "linkwatch" :

 grep -iwn 'linkwatch' /root/base.txt #Поиск в файле без учета регистра(Найдет linkwatch)

Вывод команды:

17:root         225  0.0  0.0      0     0 ?        S     2018   0:00 [linkwatch]

Вывод строки со вхождением слова  из файла в месте с контекстом (осуществляется за счет использования спец ключей -A, -В, -С )

Смотрим вывод строки вхождения и указываем ключём еще количество строк которое нужно вывести после него:

 grep -iwn -A 'linkwatch' /root/base.txt #Найдет строку с linkwatch и покажет еще 2 стоки снизу!

Вывод команды:

17:root         225  0.0  0.0      0     0 ?        S     2018   0:00 [linkwatch]

18-root      565250  0.0  0.0 103328   912 pts/1    S+   17:22   0:00 grep watch

19-1    admin   100

Смотрим вывод строки вхождения и указываем ключём -B еще количество строк которое нужно вывести перед ней:

grep -iwn -B 2 'linkwatch' /root/base.txt #Найдет строку с linkwatch  и покажет еще 2 стоки сверху! 

Вывод команды:

15-root          62  0.0  0.0      0     0 ?        S     2018   0:46 [watchdog/14]

16-root          66  0.0  0.0      0     0 ?        S     2018   0:46 [watchdog/15]

17:root         225  0.0  0.0      0     0 ?        S     2018   0:00 [linkwatch]

Смотрим вывод строки вхождения и указываем ключём  еще количество строк которое нужно вывести перед ней и после:

grep -iwn -С 2 'linkwatch' /root/base.txt #Найдет строку с linkwatch  и покажет еще 2 стоки сверху и снизу ! 

Вывод команды:

15-root          62  0.0  0.0      0     0 ?        S     2018   0:46 [watchdog/14]

16-root          66  0.0  0.0      0     0 ?        S     2018   0:46 [watchdog/15]

17:root         225  0.0  0.0      0     0 ?        S     2018   0:00 [linkwatch]

18-root      565250  0.0  0.0 103328   912 pts/1    S+   17:22   0:00 grep watch

19-1    admin   100

Поиск вхождений по всему каталогу(путь указываем ./*):

grep -iwn  "linkwatch" ./* #Найдет строки с linkwatch   вво всем указанном каталоге 

Вывод команды:

17:root         225  0.0  0.0      0     0 ?        S     2018   0:00 [linkwatch]

Рекурсивный поиск файлов со вхождениями по  всему каталогу(используем ключ -r путь указываем ./*):

grep -irl  "linkwatch" ./* #Найдет строки с linkwatch    в  указанном каталоге и его поддиректориях 

Вывод команды:

./base.txt

Пoиск с помощью регулярных выражений совместимых с языком пер( на примере поиска номера телефона):

grep -P  "\d{3}-\d{3}-\d{2}-\d{2}" /root/base.txt #Найдет в файле выражение формата \d{3}-\d{3}-\d{2}-\d{2}  {К-во цифр}

Вывод команды:

+7 968-602-8Х-7Х

Результаты данного поиска при желании можно направить в отдельный файл и чтобы записать только ту часть которая совпала а не всю строку нужно добавить ключ -o и указать файл:

grep -wioP  "\d{3}-\d{3}-\d{2}-\d{2}" /root/base.txt > tel.txt # Направим результаты поиска в файл  tel.txt

Вывод команды:

Файл tel.txt c содержимым: 968-602-8Х-7Х

С помощью  этого приема можно собрать все телефоны и адреса  почтовые из большого количества файлов и папок и засунуть вывод в один файл! 

Аналогичным способом можно указать файл tel.patterns в котором записаны регулярные выражения для поиска (файлы лучше называть согласно тому, что позволяет найти это регулярное выражение)

Используем для поиска файл с регулярными выражениями(каждое выражение с новой строки надо начинать):

grep -owiPf   "root/tel.patterns" /root/base.txt > tel.txt # Направим результаты поиска в файл  tel.txt

и:

Источник:

Ссылки:

Источник:https://vk.com/realmanual?z=video-117227374_456247417%2Fbbe29f2d5f671b0a07%2Fpl_post_-117227374_33395
  • 0 Benutzer fanden dies hilfreich
War diese Antwort hilfreich?

Verwandte Artikel

8. Команда chattr: атрибуты файла, запрет изменения файла

Команда chattr: атрибуты файла, запрет изменения файла С помощью команды chattr можно изменить...

6. Архиваторы в LINUX

В наши дни мы сталкиваемся с файлами архивов очень часто и на всех платформах: Windows, Mac или...

9 . Базовая настройка Firewall + DNS + Proxy для пересылки запросов

Netfilter Firewall + DNS + Proxy Обновляемся и ставим нужный софт. Очень часто в небольших...

9.2 RDP КЛИЕНТЫ В LINUX

ЛУЧШИЕ RDP КЛИЕНТЫ В LINUX 1. REMMINA Для этой операционной системы существует не так много...

9.1 Первичная диагностика VDS/VPS

Диагностика VDS/VPS    Смотрим, как загружена система: # top // можно посмотреть время...