Как сделать grep в переменной? Я сохранил вывод wget в переменной, и мне нужно извлечь из него некоторые строки. Как и содержимое переменной, это
upgrade http://wordpress.org/download/ http://wordpress.org/wordpress-3.0.5.zip 3.0.5 en_US 4.3 4.1.2
Мне нужно проверить, содержит ли строка слово upgrade, поэтому я могу сделать простой grep, а затем проверить его статус выхода на $? и продолжить.
Как я могу получить значение 3.0.5, которое на самом деле является четвертым словом?
И как на самом деле grep в переменной?
Вместо grepping, возможно, просто используйте cut. Это будет намного быстрее, чем запуск полного регулярного выражения.
STRING="upgrade http://wordpress.org/download/ http://wordpress.org/wordpress-3.0.5.zip 3.0.5 en_US 4.3 4.1.2"
echo "$STRING" | cut -d" " -f4
Выходы: 3.0.5
Это может быть немного более надежным (захват версии из zip url):
echo "$STRING" | sed -n -e 's/.*wordpress-\(.*\)\.zip.*/\1/p'
Если вы хотите сохранить его обратно в переменной bash, просто оберните это в кавычки и обратные ссылки. Первая часть будет выполняться первой, оставив ее как строку.
RESULT="`echo "$STRING" | sed -n -e 's/.*wordpress-\(.*\)\.zip.*/\1/p'`"
Итак, чтобы разбить это (за ваш комментарий) на поиск upgrade в начале:
STRING="upgrade http://wordpress.org/download/ http://wordpress.org/wordpress-3.0.5.zip 3.0.5 en_US 4.3 4.1.2"
if [[ $STRING == upgrade* ]]; then
VERSION="`echo "$STRING" | sed -n -e 's/.*wordpress-\(.*\)\.zip.*/\1/p'`"
# do something else now
else
# do something if this isn't an upgrade (optional)
fi
В дополнение к общему вопросу вы должны знать, что вы также можете использовать grep, если строка содержит несколько строк, и вы хотите узнать строку, содержащую определенное слово.
Пример:
STRING="Some lines
with the word one
and the word two"
используйте grep, чтобы найти строку со словом «один», используя эхо с указанной переменной:
echo "$STRING" | grep one