Как grep в содержимом строковой переменной?

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

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

  STRING = "обновить это, если сможете"
 для x в $ STRING;  делать
    echo $ x
    если ["$ x" = 'upgrade'];  тогда
        найдено эхо
        у = $ х
        ломать
    фи
 сделанный 
 echo $ y 

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

  declare -az
 г = ($ СТРОКА)
 echo $ {z [0]} 

Вместо 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