Я рабочий скрипт, который ищет ошибки в лог-файлах:Bash: Заменить часть строки с групповым символом в шаблоне поиска
CONFIGFILE=testfmc.ini
log=log1.log
res=0
while read line ;
do
echo "$line"
if [[ "$line" == PAT[0-9][0-9]* ]] ; then
echo "line --$line--"
patnum=$(echo "$line" | awk -F= '{print $1}');
pattern=$(echo "$line" | awk -F= '{print $2}');
echo "$patnum --- $pattern";
res=$(fgrep -c "$pattern" $log);
if [[ "$res" -gt 0 ]] ; then
echo "Error in log files $res";
fi
echo "End of IF";
fi
echo $res;
done < $CONFIGFILE
testfmc.ini является файл с шаблонами:
PAT01=java.net.SocketException: Connection reset
PAT02=javax.mail.StoreClosedException: failed to create new store connection
PAT03=javax.mail.MessagingException: ServerName NO Server Unavailable
PAT04=javax.mail.FolderClosedException: * BYE Connection is closed
Проблема в том, что в PAT03 есть имя сервера, и эта ошибка может отображаться с несколькими именами серверов. Как я могу заменить имя_сервера в шаблоне WILDCARD. Я пробовал с * или * или "*" и еще несколько вариантов, но ничего не работает.
Что вы на самом деле пытаетесь достичь с этим кодом? С описанием на английском языке было бы легче работать. –
Если «ServerName» никогда не имеет смысла (т. Е. Вы не хотите поймать только те вещи, которые могут быть именами серверов, а также не извлекать их после сопоставления), вы должны действительно изменить файл шаблона – Aaron
Кстати - все ' awk -F = 'глупо. Гораздо эффективнее использовать 'while IFS =" = "read -r patnum pattern' для чтения непосредственно в нужные вам переменные. –