Dada file.html
:
<html>
<body>
<a href="url1">link text 1</a>
<a href="url2">link text 2</a>
<a href="url3">link text 3</a>
...
</body>
</html>
Podemos usar pipes Unix para enviar a saída de xmllint
, para sed
e ver este resultado:
$ xmllint --html --xpath //a/@href input.html | sed 's/ href="\([^"]*\)"/\n/g'
url1
url2
url3
Explicação
Com xmllint
sozinho, só recebemos:
$ xmllint --html --xpath //a/@href input.html
href="url1" href="url2" href="url3"%
- o trailing
%
indica que não há nova linha à direita
Um dos benefícios de sistemas semelhantes ao Unix é que podemos nos beneficiar do recurso Tubos de Doug McIlroy , Portanto, não precisamos que um programa tente fazer tudo. Na verdade, somos incentivados a combinar programas para atender às nossas necessidades.
Sendo assim, achando a saída de xmllint
insatisfatória, canalizamos para combiná-la com o comando sed
, que:
- procura
href="URL"
units - usando o
\(
\)
agrupamento para envolver a parte do URL - e substituí-lo por
\n
, de modo que ele faça referência ao grupo que definimos em torno do URL, além de adicionar uma nova linha depois da correspondência de
Dessa forma, combinamos xmllint
e sed
para obter a saída delimitada por linha desejada, uma URL por linha.