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.