BASH obtém valor da string

0

Eu tenho essa string armazenada em uma variável

<li class="rainbow-list-item southern disrupted " data-line-id="lul-southern" data-severity-codes="4,6,9" data-mode="national-rail">

e gostaria de ter apenas os valores numéricos para códigos de gravidade de dados. Lembre-se de que:

  1. Os valores numéricos são 1,2 ou 3 caracteres
  2. A alteração do comprimento da ID da linha de dados
por Federi 23.06.2016 / 23:54

2 respostas

1

Você pode usar o operador correspondente =~ :

#! /bin/bash
var='<li class="rainbow-list-item southern disrupted " data-line-id="lul-southern" data-severity-codes="4,6,9" data-mode="national-rail">'

if [[ $var =~ data-severity-codes=\"([^\"]+)\" ]] ; then
    echo ${BASH_REMATCH[1]}
fi

Saída:

4,6,9

Ou use uma ferramenta com reconhecimento de XML:

xmllint --xpath li/@data-severity-codes - <<< "$var</li>" \
| cut -f2 -d\"
    
por 24.06.2016 / 00:01
1

Você pode fazer assim:

$ MYVAR='<li class="rainbow-list-item southern disrupted " data-line-id="lul-southern" data-severity-codes="4,6,9" data-mode="national-rail">'
$ echo $MYVAR | tr ' ' '\n' | awk -F= '/data-severity-codes/ {print $2}'
"4,6,9"

Você também pode usar sed para remover "e substituir por um espaço em branco se precisar:

$ echo $MYVAR | tr ' ' '\n' | awk -F= '/data-severity-codes/ {print $2}' | sed -e 's/"//g' -e 's/,/ /g'
4 6 9
    
por 24.06.2016 / 00:13