Как я могу найти содержимое строковой переменной

Как сделать 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 в переменной?

4
задан 20 May 2014 в 18:09

3 ответа

Вместо того, чтобы искать, возможно просто используйте 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

Это может быть немного более надежным, хотя (захватывает версию из почтового 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
0
ответ дан 20 May 2014 в 18:09

В дополнение к общему вопросу вы должны знать, что вы также можете использовать grep, если строка содержит несколько строк и вы хотите найти строку, содержащую определенное слово.

Пример:

STRING="Some lines
with the word one
and the word two"

использовать grep, чтобы найти строку со словом «one», использовать echo с указанной в кавычке переменной:

echo "$STRING" | grep one
0
ответ дан 20 May 2014 в 18:09

Если вы просто ищете слово, вы можете использовать цикл for.

STRING="upgrade this if you can"
for x in $STRING; do
   echo $x
   if [ "$x" = 'upgrade' ]; then
       echo found
       y=$x
       break
   fi
done 
echo $y

Если обновление всегда в одной и той же позиции, вы можете попробовать присвоение массива.

declare -a z
z=($STRING)
echo ${z[0]}
0
ответ дан 20 May 2014 в 18:09

Другие вопросы по тегам:

Похожие вопросы: