Вход в grep
grep — одна из самых полезных команд UNIX; это значительно упрощает задачу поиска. Я подумал о том, чтобы собрать свои знания об этой команде в одном месте, чтобы стать руководством по переходу для всех, кто только начинает работать с командами терминала. В этом уроке я подробно расскажу о различных вариантах и вариантах использования grep.
Я буду использовать для этого пример файла журнала и продемонстрирую возможности поиска grep.
1. grep ‹текст› ‹файл›
Grep по умолчанию чувствителен к регистру и возвращает всю строку, содержащую соответствующий текст.
grep "RSVP" sampleLogFile.log
2. выбрать только совпадение
-o используется для получения только совпадающей части, а не всей строки
grep -o "RSVP" sampleLogFile.log
3. игнорировать регистр
Вы можете попросить grep игнорировать регистр, указав опцию -i.
grep -i “RSVP” sampleLogFile.log
4. инвертировать совпадение
-v можно использовать для получения всего, что не соответствует искомому тексту.
grep -v “RSVP” sampleLogFile.log
5. сопоставление регулярных выражений
Что, если вы хотите получить все IP-адреса или выполнить поиск с помощью регулярного выражения? grep также поддерживает это с опцией -E!
grep -E “[0–9]+\.[0–9]+\.[0–9]+\.[0–9]+” sampleLogFile.log
игнорируйте неуклюжее регулярное выражение IP 😅
6. считать
Хотя grep предоставляет способ подсчета вхождений текста (ну, не совсем так!), grep возвращает количество строк, содержащих текст. Итак, если ваш поисковый текст присутствует несколько раз в строке, grep не будет вашим самым большим союзником. Не волнуйтесь, у меня есть идеальное решение для этого.
grep -oc “RSVP” sampleLogFile.log
это возвращает количество строк, содержащих текст «RSVP»
grep -o “RSVP” sampleLogFile.log | wc -l
это возвращает фактическое количество текста «RSVP» в файле.
7. Имя выходного файла, содержащее искомый текст
Команда -l выдает имена файлов с соответствующим текстом вместо обычного вывода текста.
grep -l “RSVP” sampleLogFile.log
Последний пример использования, прежде чем мы закроем это руководство, что, если вам нужны строки с текстом «RSVP», а также IP-адрес? Вы можете запустить grep для результата grep. Позвольте мне показать вам, как это сделать.
grep -i “RSVP” sampleLogFile.log | grep -E “([0–9]+\.){3}[0–9]+”
Здесь я извлекаю строки, считающие текст «RSVP», а затем проверяю строки с IP-адресом в них. Такое добавление можно сделать n- число раз.
Спасибо за чтение.