Extrai uma parte de uma string em um script bash

2

Eu tenho uma variável com algum texto nela. Eu preciso obter um pouco de informação específica disso. Por exemplo eu tenho

export OUTPUT="Running \"protractor:admin\" (protractor) task Using ChromeDriver directly... [launcher] Running 1 instances of WebDriver Jasmine version: 1.3.1 revision 1354556913 SauceOnDemandSessionID=5c72e54365e9bb559ea389dc164ba754 job-name=Admin"

Eu preciso de 5c72e54365e9bb559ea389dc164ba754 em uma variável SAUCE_ID . O SessionID real muda cada execução do script, então eu preciso de alguma maneira extraí-lo. É sempre precedido por SauceOnDemandSessionID= e seguido por job-name= .

    
por Justin808 23.04.2015 / 01:59

3 respostas

3

Use os recursos de manipulação de strings do shell que vêm com a expansão de parâmetros . Esses recursos estão presentes em todos os shells de estilo Bourne não antigos, incluindo dash, bash e ksh.

suffix=${OUTPUT#*SauceOnDemandSessionID=}
SAUCE_ID=${suffix%%[!0-9A-Fa-f]*}
    
por 23.04.2015 / 02:14
0

Se o ID for sempre do mesmo tamanho e composto apenas pelas letras a até f e números, e não houver sequências semelhantes na saída, você poderá fazer isso:

SAUCE_ID="$(echo $OUTPUT | egrep -o '[0-9a-f]{32}')"

Ele procura por uma string de 32 caracteres que seja um número em 0-9 ou uma letra em a-f.

Para permitir a variação no tamanho da string, use algo assim:

SAUCE_ID="$(echo $OUTPUT | egrep -o '[0-9a-f]{26,38}')"

Este exemplo corresponde a qualquer uma dessas strings com entre 26 e 38 caracteres. Você também pode usar isso para combinar strings com pelo menos 26 caracteres:

SAUCE_ID="$(echo $OUTPUT | egrep -o '[0-9a-f]{26,}')"
    
por 23.04.2015 / 02:05
0

Usando grep com o PCRE, você pode usar o regex:

SauceOnDemandSessionID=\K[^ ]*(?= job-name)

Teste:

$ SAUCE_ID=$(grep -Po "SauceOnDemandSessionID=\K[^ ]*(?= job-name)" <<< "$OUTPUT")
$ echo "$SAUCE_ID"
5c72e54365e9bb559ea389dc164ba754

Será um trabalho em todos os casos, já que você tem SauceOnDemandSessionID= antes e job-name após o padrão.

    
por 23.04.2015 / 02:07