Я бы хотел иметь возможность легко искать файлы журналов.
Мои файлы журналов очень большие и выглядят так. ,.
-------------------------------
id=<id>
request=<request>
...
status=<status>
metrics=<metrics>
-------------------------------
id=<id>
request=<request>
...
status=<status>
metrics=<metrics>
Каждый журнал начинается с строки из тире, а затем для каждого журнала регистрируется несколько строк информации, которые могут измениться.
Так что я хотел бы получить выводлюбых журналов, которые соответствуют динамическому числу фильтров.
Я планирую сделать эту функцию bash, которую я могу вызвать и передать в filename
и нескольких фильтрах
Например, вызов ее с помощью одногофильтр
$ searchLogs <filename> <first-match>
например, вызов его с несколькими фильтрами
$ searchLogs <filename> <first-match> <second-match> <third-match> ...
Я нашел команду, которую можно использовать для сопоставления с одним фильтром
$ sed '/^---/ !{H;$ !d};x;/<search_term>/ !d'
.. .и я мог бы создать несколько функций разной длины и просто добавлять ;/<search_term>/ !d
к нему для каждого дополнительного поискового запроса, но я бы хотел построить его динамически, если это возможно, и сохранить его в функции, чтобы я мог легко поделиться ею с членами команды.
Вот примерно так я думаю. ,,но мне не повезло
function searchRequestLogs() {
logFile="$1"
searchTerms="${@:2}"
sedString="'"'/^---/ !{H;$ !d};x';
for searchTerm in $searchTerms
do
# append searchTerm
sedString=$sedString';/'$searchTerm'/ !d';
done
sedString=$sedString"'"
cat $logFile | sed $sedString;
}
Я должен также отметить, что файлы журналов могут быть очень большими, поэтому я стараюсь не делать слишком много проходов, если это возможно.