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

1
задан 20 May 2014 в 19:09

2 ответа

Вместо 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
8
ответ дан 25 May 2018 в 23:03
  • 1
    Круто! Кажется, это четвертое слово. Но я хочу, чтобы это тоже хранилось в переменной. Как я должен обернуть команду для сохранения в переменной? Также мне нужно сделать grep, чтобы проверить наличие слова upgrade, или вы хотели сказать, что я могу сначала вырезать первое слово, а затем проверить его с обновлением слова, и таким образом он будет быстрее? Мне нужно запустить это каждые 10 минут быстрее, поэтому я бы хотел, чтобы он был настолько быстрым, насколько я могу это сделать. :) – Ashfame 10 February 2011 в 19:03
  • 2
    @Ashfame Edited. – Oli♦ 10 February 2011 в 19:13
  • 3
    Ubercool! : D Мне нужно сначала изучить о sed, а затем я вернусь к вам. Благодаря :) – Ashfame 10 February 2011 в 19:23
  • 4
    grymoire.com/Unix/Sed.html – djeikyb 11 February 2011 в 14:47
  • 5
    Большое спасибо :) Это будет более полезно для людей, которым нужно поймать вещи в произвольной строке. Мне хотелось бы отметить два решения в качестве ответов. – Ashfame 12 February 2011 в 00:57

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

Пример:

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

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

echo "$STRING" | grep one
0
ответ дан 25 May 2018 в 23:03

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

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