Я нахожусь в ситуации, когда я хочу взять выходные данные команды grep из одной итерации цикла for и преобразовать их во входные данные для следующей команды grep в следующей итерации.
Обычно я бы использовал массив и цикл for для создания одной команды grep, однако, потому что мне нужна переменная bash GREP_COLOR
для переключения между итерациями, с которыми я сталкиваюсь в этой проблеме.Я полагаю, я мог бы создать три разные функции, которые все делают одно и то же, за исключением этой переменной, но я бы предпочел иметь одну функцию, если это вообще возможно.Вот массив:
patterns=("general-red" "general-yellow" "general-green" "ha-red" "ha-yellow" "ha-green")
Вот функция:
function iterate-patterns() {
for i in "${patterns[@]}"
do
if [[ "$i" = *-red ]]
then
GREP_COLOR="$RED" grep -E --text --color=always --line-buffered -f /var/lib/foobar/"${i}".txt
elif [[ "$i" = *-yellow ]]
then
GREP_COLOR="$YELLOW" grep -E --text --color=always --line-buffered -f /var/lib/foobar/"${i}".txt
elif [[ "$i" = *-green ]]
then
GREP_COLOR="$GREEN" grep -E --text --color=always --line-buffered -f /var/lib/foobar/"${i}".txt
else
cat
fi
done
}
Вот функция, которая вызывает эту функцию, обеспечивая начальный ввод:
function daddyfunction() {
iterate-filters |\
iterate-experimental |\
iterate-patterns
}
По существу,каждый элемент в массиве представляет файл для команды grep -f
с множеством шаблонов, которые необходимо найти и которые выделены требуемым цветом.Однако, поскольку код в настоящее время стоит, в конечном итоге отображается только первый элемент массива.Я совершенно уверен, что каждый grep должен быть каким-то образом изменен на вход для команды grep следующей итерации.
Это выполнимо?Я застрял, делая функцию для каждого цвета?Есть ли лучший способ сделать все это?Я ищу мудрость интернетов.;) Пожалуйста, и спасибо.
РЕДАКТИРОВАТЬ
Просто чтобы подтвердить, три отдельные функции работает:
function iterate-redhighlights() {
greplist=()
for i in "${redpatterns[@]}"
do
if [[ "$i" = *-red ]]
then
greplist+=( -f /var/lib/foobar/"${i}".txt)
else
cat
fi
done
GREP_COLOR="$RED" $search "${greplist[@]}"
}
function iterate-yellowhighlights() {
greplist=()
for i in "${yellowpatterns[@]}"
do
if [[ "$i" = *-yellow ]]
then
greplist+=( -f /var/lib/foobar/"${i}".txt)
else
cat
fi
done
GREP_COLOR="$YELLOW" $search "${greplist[@]}"
}
function iterate-greenhighlights() {
greplist=()
for i in "${greenpatterns[@]}"
do
if [[ "$i" = *-green ]]
then
greplist+=( -f /var/lib/foobar/"${i}".txt)
else
cat
fi
done
GREP_COLOR="$GREEN" $search "${greplist[@]}"
}