Вероятно, существует скрытый символ после 4106, по всей вероятности возврат каретки, если бы файл прибывает из мира Microsoft, который необходимо было бы разделить сначала (или сделать все это с awk
).
$ seq 1 $'2\r'
seq: invalid floating point argument: 2
Try `seq --help' for more information.
$ echo seq 1 $'2\r'
seq 1 2
Это там, но Вы не видите его. Когда произведено к терминалу, это (обычно) только перемещает курсор в начало строки.
С ksh93, zsh или ударом, попробуйте:
printf '<%q>\n' "$start"
видеть то, что это содержит.
Можно использовать нечто подобное:
find . -name "*.log" | xargs grep -E 'fatal|error|critical|failure|warning|'
В этом случае каждый файл с расширением .log
будет найден и применена команда grep
.
Если вам нужно выполнить grep для произвольного набора имен файлов, который не может быть получен с помощью регулярного выражения:
grep -E 'fatal|error|critical|failure|warning|' `cat<<FIN
> file1
> file2
> ...
> filen
> FIN`
В чем преимущество вставки имен файлов друг за другом? Вы можете скомпилировать список имен файлов в текстовом файле, а затем вставить его.
Если проще, можно просто указать каждый файл по очереди.
grep -E 'fatal|error|critical|failure|warning' file1.log file2.log
Это была очень трудоемкая задача. И да, она, безусловно, требует написания сценария, если вы собираетесь искать несколько строк в нескольких разных журналах одновременно. Но мне недавно пришлось это сделать, и это было довольно болезненно. Тем не менее, он уже готов и его можно загрузить по следующей ссылке:
Принцип работы довольно прост.
Сценарий 1: Мониторинг ОДНОЙ строки в ОДНОМ файле журнала
./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m 'can.*t.*open' '.' 1 2 single_errCheck -ndshow
Сценарий 2: Мониторинг МНОЖЕСТВА строк в ОДНОМ файле журнала
./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m 'can.*t.*open_P_ntpd.*stat' '.' 1 2 multi_errCheck -ndshow
Сценарий 3: Мониторинг ОДНОЙ/МНОЖЕСТВА строк в МНОЖЕСТВЕ файлов журнала
./logsearch.sh localhost /var/tmp/logXray autonda /var/log 60m 'can.*t.*open_P_ntpd.*stat' '.' 1 2 multi_err_multi_logCheck -ndshow
Примечания:
Символ _P_ означает OR - он заменяет символ трубы "|", поскольку менее вероятно, что вам придется искать строку, содержащую "_P_". Если вы не хотите набирать "_P_", вы можете просто заменить _P_ на "|".
При использовании этого скрипта, параметры, которые вы будете часто менять:
При использовании '-ndfoundmul' вы получите результат, подобный следующему:
[root@dgphxtest001]# ./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m 'can.*t.*open_P_ntpd.*stat' '.' 1 2 blahblahA -ndfoundmul
OK: [/var/log/messages][1] /var/log/messages:P=(can_t_open=0 ntpd_stat=0)_F=(117s)_R=(228,228=0)
Решение проблемы оригинального автора сообщения: Сканирование на наличие нескольких строк в нескольких файлах журналов
./logsearch.sh localhost /var/tmp/logXray autonda /var/log 60m 'fatal_P_error_P_critical_P_failure_P_warning' '.' 1 2 multierr_logCheck -ndshow
ОС: Это было протестировано на Ubuntu и Red Hat
grep -EFn "fatal|error|critical|failure|warning|search-string" /path/to/the/file/log_file?.lo* --color=auto
Будет выполнен поиск 'фатальная ошибка или критическая ошибка или сбой или предупреждение или поиск -строка' в файлах с именем, начинающимся с 'файл журнала _?' и расширение 'lo ' *в пути /path/to/the/file/ и присвойте строке поиска случайный цвет и напечатайте номер найденной строки в.
Вы также можете использовать фигурные скобки, если все файлы находятся в одной папке.
См. пример
grep -E 'fatal|error|critical|failure|warning|' /var/log/{messages,secure,syslog,dmesg}
Если вы добавите s в grep, это подавит ошибки об отсутствующих файлах
grep -sE 'fatal|error|critical|failure|warning|' /var/log/{messages,secure,syslog,dmesg}
Я просто экспериментировал с этим сам, выполняя команды, которые работают в нескольких дистрибутивах, где они находятся в одном файле, а в другом из-за различий в ОС.
Журналы почты
sudo grep -is bob@example.com /var/log/{maillog,exim_mainlog,exim_rejectlog,mail.log,mail.err,syslog}
Архивные почтовые журналы с использованием 2>/dev/null для подавления предупреждений zgrep об отсутствии.gz
sudo zgrep -is bob@example.com /var/log/{maillog*,exim_mainlog*,exim_rejectlog*,mail.log*,mail.err*,syslog*} 2>/dev/null
Ссылка :Есть ли способ сослаться на несколько файлов в каталоге без повторного ввода всего пути?