Я новичок в bash программировании, и я пытался написать функцию для поиска нескольких подстрок в строке для анализа журнала.
Например: у меня есть файл журнала, который содержит следующую строку:
"01-01-2020 STREETNEW Функция Триггерная команда 3 обработана - Создана новая улица."
Теперь я хочу найти 2 подстроки в этой строке. Первая подстрока, которую я ищу, это «Команда 3», чтобы определить, какое действие было инициировано. Если «Команда 3» найдена, я хочу найти вторую подстроку «Новая улица создана», чтобы проверить вывод инициированного действия.
До сих пор я написал функцию содержимого, которая помогает мне найти соответствует, и это работает отлично до сих пор. Проблема в том, что эта функция может найти совпадение только для одной подстроки.
Моя функция выглядит следующим образом:
declare -a arrayLog # This Array contains my Log-File line per line
declare -a arrayCodeNumber # Containing the code numbers, e.g. "Command 3"
declare -a arrayActionTriggered # Containing the result of the triggered action, e.g. "New street created"
#[... build arrays etc...]
function contains() {
local n=$#
local value=${!n}
for ((i=1;i < $#;i++)) {
shopt -s nocasematch
[[ "${!i}" =~ "${value^^}" ]] && echo "y;$i" || echo "n;$i"
}
}
#I'm calling the function like this in a for-loop:
contains "${arrayLog[@]}" "${arrayCodeNumber[i]}"
#[... processing function results ...]
Моя функция возвращает "y; $ i" или "n; $ i", чтобы указать, было ли совпадение и в какой строке В файле журнала найдено совпадение - этот вывод мне понадобится для обработки результатов сопоставления позже в моем коде.
К сожалению, я не знаю, как расширить или улучшить мою функцию для поиска нескольких подстрок в строке .
Что бы я сделал, чтобы расширить функцию для приема 2 входных массивов (для моего параметра сопоставления) и 1 массива журналов, а также для расширения процесса сопоставления?
Заранее большое спасибо!
С уважением, Тоби