Использовать расширение параметра усечение.
case "$filename" in
*\(*.*\)*)
before_first_parenthesis=${filename%%\(*}
after_first_parenthesis=${filename#*\(}
before_dot=${after_first_parenthesis%%.*}
echo "$before_first_parenthesis" "$before_dot"
*) echo "does not match the format";;
esac
Использование одной команды awk
:
awk -F' - |\"' 'tolower($7) ~ /bot|crawler/ && tolower($7) !~ /google|yahoo|bing|msn|ask|aol|duckduckgo/{system("sudo ufw deny from "$1" to any")}' access.log
Это отфильтрует только те записи, которые имеют bot
или crawler
в 7-м столбце (, что делает ваша первая команда grep
. Только если 7-й столбец не содержитgoogle|yahoo|bing|msn|ask|aol|duckduckgo
(то, что делает ваша вторая grep
команда ). В любой соответствующей строке будет выполнено sudo ufw deny from "$1" to any
в первом столбце. (Что делает ваша последняя awk
команда ).