Como faço para grep no conteúdo de uma variável de string?

4

Como fazer um grep em uma variável? Eu armazenei a saída do wget em uma variável e preciso extrair algumas strings dela. Como o conteúdo da variável é

upgrade http://wordpress.org/download/ http://wordpress.org/wordpress-3.0.5.zip 3.0.5 en_US 4.3 4.1.2

Eu preciso verificar se a string contém a palavra upgrade , então eu posso fazer um simples grep e então verificar o status de saída dele por $? e prosseguir.

Como posso obter o valor 3.0.5 , que é na verdade a quarta palavra?

E como, na verdade, grep em uma variável?

    
por Ashfame 10.02.2011 / 15:38

3 respostas

2

Se você está apenas procurando por uma palavra, você pode usar um loop 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

Se a atualização estiver sempre na mesma posição, você poderá tentar a atribuição de matriz.

declare -a z
z=($STRING)
echo ${z[0]}
    
por BillThor 11.02.2011 / 03:01
8

Em vez de usar grepping, use apenas cut . Vai ser muito mais rápido do que executar um regex completo.

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

Saídas: 3.0.5

Isso pode ser um pouco mais robusto embora (é pegar a versão do zip url):

echo "$STRING" | sed -n -e 's/.*wordpress-\(.*\)\.zip.*//p'

Se você quiser armazená-lo de volta em uma variável bash, apenas coloque entre aspas e backticks. A parte backticked será executada primeiro, deixando-a como uma string.

RESULT="'echo "$STRING" | sed -n -e 's/.*wordpress-\(.*\)\.zip.*//p''"

Então, até onde tira isso (por seu comentário) para procurar upgrade no começo:

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.*//p''"
    # do something else now
else
    # do something if this isn't an upgrade (optional)
fi
    
por Oli 10.02.2011 / 15:47
0

Além da pergunta geral que você deve saber, você também pode usar grep se a string contiver várias linhas e você quiser descobrir a linha que contém uma determinada palavra.

Exemplo:

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

use grep para encontrar a linha com a palavra "one" use echo com a variável citada:

echo "$STRING" | grep one
    
por rubo77 20.05.2014 / 11:29

Tags