У меня есть набор файлов журналов, которые мне нужно просмотреть, и я хотел бы одновременно искать определенные строки в одних и тех же файлах. Возможно ли это? В настоящее время я использую
grep -E 'fatal|error|critical|failure|warning|' /path_to_file
Как использовать это и искать строки из нескольких файлов одновременно? Если это то, что должно быть написано в сценарии, может ли кто-нибудь предоставить простой сценарий для этого?
grep
может принимать более одного аргумента файла.Ответы:
источник
grep
пропустить каталоги, но все равно рекурсивно проверять все файлы?grep -E 'text' **/*
работает, но выдает сообщение об ошибке для каждого подкаталога (а затем правильно проверяет все файлы в них)find . -type f -exec grep -E 'fatal|error|critical|failure|warning' {} +
Вы можете использовать что-то вроде этого:
Это позволит найти каждый файл с
.log
расширением as и применитьgrep
команду.источник
xargs
и возможность серьезной поломки пробелов в именах файлов, когда вы можете просто использоватьfind . -name '*.log' -exec grep -E 'fatal|error|critical|failure|warning' {} +
?Если это проще, вы можете просто указать каждый файл один за другим.
источник
Если вам нужно выполнить поиск произвольного набора имен файлов, которые не могут быть получены с помощью регулярного выражения:
В чем преимущество вставки имен файлов одно за другим? Вы можете скомпилировать список имен файлов в текстовом файле, а затем вставить его.
источник
Если вы хотите искать рекурсивно в файлах подкаталогов также, то вы можете использовать команду ниже
Он также будет искать рекурсивно в файлах подкаталогов.
источник
Это была очень трудоемкая задача. И да, это, безусловно, нужно было написать в сценарии, если вы собираетесь искать несколько строк в нескольких разных журналах одновременно. Но мне недавно пришлось это сделать, и это было довольно больно. Тем не менее, это сделано и готово и может быть загружено по следующей ссылке:
Скачать скрипт поиска по журналу
Как это работает, довольно просто.
Сценарий 1: Мониторинг одной строки в одном файле журнала
Сценарий 2. Мониторинг НЕСКОЛЬКИХ строк в одном файле журнала
Сценарий 3: Мониторинг одной / нескольких строк в нескольких файлах журнала
Примечания:
_P_ означает ИЛИ - Он заменяет трубу "|" символ, потому что менее вероятно, что вам придется искать строку, содержащую "_P_". Если вы не хотите вводить «_P_», вы можете просто заменить _P_ на «|».
При использовании этого скрипта параметры, которые вы будете часто менять:
Используя '-ndfoundmul', вы получите вывод, похожий на:
Решение проблемы оригинального плаката: сканирование нескольких строк в нескольких файлах журнала
ОС: это было проверено на Ubuntu и Red Hat
источник
При этом в файлах с именем, начинающимся с «log_file?», Будет выполнен поиск «фатальной или ошибки, или критической, или ошибки, или предупреждения, или строки поиска ». и расширение 'lo ' * в пути / path / to / the / file / и присвоить строке поиска случайный цвет и номер строки печати, по которой она была найдена.
источник
grep
навыки, так что удачи в вашей карьере USE!-E
и-F
не может быть использован в то же время, они противоречат друг другу (опечатка?).Ответ ДжигарГанди демонстрирует использование подстановочного знака звездочки. Их больше, и вы можете увидеть их здесь или бегом
man 7 glob
.Одним из них, который я нашел полезным, является соответствие диапазона
[]
. Так как система, над которой я работаю, создает последовательно пронумерованные файлы журнала, напримерproduct.log.1
product.log.2
...
product.log.200
, удобно выполнять grep с помощью одной команды для 3 или 4 последовательных файлов, но не более. Так этоgrep 'whatever' product.log.[5-7]
будет grep для всех файлов, заканчивающихся на product.log. 5, 6 или 7. Подстановочный знак не обязательно должен быть в конце, поэтому ответ flickerfly можно упростить до
grep -E 'fatal|error|critical|failure|warning' file[1,2].log
Также обратите внимание, что эти подстановочные знаки можно использовать и в других командах, например, в
cp
.источник
Вы также можете использовать фигурные скобки, если файлы находятся в одной папке.
См пример
Если вы добавляете s в grep, это подавляет ошибки, связанные с отсутствующими файлами.
Я сам экспериментировал с этим для выполнения команд, которые работают в нескольких дистрибутивах, где он находится в одном файле по сравнению с другим из-за различий в ОС.
Почтовые логи
Архивные журналы почты, использующие 2> / dev / null для подавления пропущенных zgrep предупреждений .gz
Справка: есть ли способ сослаться на несколько файлов в каталоге без повторного ввода всего пути?
источник