1. Погружение в 1 переменную
Попробуй это:
foo1=$(curl https://domain.com/file.xml | grep -E "string1|string2")
Это будет выполнено curl
1 раз и grep для случаев string1
или string2
.
2. Разбиение на 2 переменные
Если это разные переменные, измените тактику немного. Захватите результат curl
и затем grep
потом.
output=$(curl https://domain.com/file.xml)
foo1=$(echo "$output" | grep "string1")
foo2=$(echo "$output" | grep "string2")
3. Поиск в массиве
Вы также можете хранить результаты в массиве вместо отдельных переменных.
output=$(curl https://domain.com/file.xml)
readarray foo < <(echo "$output" | grep "string1|string2")
С этим немного сложно разобраться, если ваши результаты из grep могут не возвращать результаты, так как результаты из «string2» могут быть первым или вторым элементом в массиве, но я предоставляю его здесь просто как демонстрацию подход.
4. Чтение в переменную из grep
Еще один метод, который использует read
команду вместе с процессом substitution ( <( ..cmd..)
).
$ read -d"\n" foo1 foo2 \
<(curl https://domain.com/file.xml | grep -E "string1|string2")
Это снова может быть сложно, если поиск «string1» ничего не возвращает, в результате чего любые совпадения с «string2» будут отображаться в $foo1
. Также этот подход имеет тенденцию быть менее переносимым, чем № 2 или № 3 выше.
Серьезно, парень, есть миллион способов снять шкуру с этой кошки.
источник