Grep apenas para conteúdo entre tags

1

Eu tenho um tipo de arquivo html que em algum lugar inclui uma tag da seguinte forma:

<Currentnumber>0.3.5</Currentnumber>

Como obtenho em uma variável o valor 0.3.5 e somente isso?

Cheguei até a linha da seguinte forma:

grep -E "<Currentnumber>.*</Currentnumber>$" myfile

Eu gostaria que, para fins educacionais, qualquer resposta também fornecesse uma explicação dos parâmetros grep usados.

Por favor, note que a linha começa com alguns espaços vazios (ou abas), é por isso que o seguinte não funciona

grep -E "^<Currentnumber>.*</Currentnumber>$" myfile
    
por pkaramol 13.02.2018 / 18:36

2 respostas

4

Nunca analise o html com regex! Esse é o erro mais comum nos sites da stackexchange.

É melhor usar um analisador de XML / HTML, como , ou saxon-lint meu próprio projeto

Exemplos:

xmllint --xpath '//Currentnumber/text()' file.html
xmlstarlet sel -t -v '//Currentnumber/text()' file.html
saxon-lint --xpath --html '//Currentnumber/text()' file.html

Verifique: Usando expressões regulares com tags HTML

    
por 13.02.2018 / 18:53
-2

Use sed e regex

sed -e 's/<Currentnumber>\(.*\)<\/Currentnumber>//' file.html
    
por 13.02.2018 / 18:40