(과도하게 단순화된) 다음과 같은 HTML 문서가 있습니다.
<html>
<body>
<a href="...">...</a>
<a href="...">...</a>
<a href="...">...</a>
...
</body>
</html>
내가 원하는 것은 줄로 구분된 출력에서 URL을 추출하는 것입니다. xmllint를 입력하세요.
$ xmllint --html --xpath //a/@href
href="..." href="..." href="..."
속성, 이름을 포함한 전체 속성을 가져와서 공백으로 구분하여 출력합니다. 속성 값이 포함된 행 목록을 얻는 방법은 무엇입니까 href
? 나는 다음과 같은 출력을 원합니다 :
...
...
...
각 요소의 속성 ...
에 있는 URL은 어디에 있습니까?href
a
이 출력 형식을 올바르게 지정하려면 어떻게 해야 합니까?
답변1
반면 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>
Unix 파이프를 사용하여 기존 xmllint
출력을 보내고 sed
다음 결과를 볼 수 있습니다.
$ xmllint --html --xpath //a/@href input.html | sed 's/ href="\([^"]*\)"/\1\n/g'
url1
url2
url3
설명하다
단독으로 사용하면 xmllint
다음과 같은 결과만 얻을 수 있습니다.
$ xmllint --html --xpath //a/@href input.html
href="url1" href="url2" href="url3"%
- 후행은
%
후행 개행 문자가 없음을 의미합니다.
유닉스 계열 시스템의 장점 중 하나는 다음과 같은 이점을 얻을 수 있다는 것입니다.더그 매킬로이의 파이프기능이 있으므로 하나의 프로그램으로 모든 작업을 수행할 필요가 없습니다. 실제로 필요에 맞게 프로그램을 결합하는 것이 좋습니다.
따라서 발견된 출력은 만족스럽지 못하며 xmllint
이를 파이프를 통해 명령과 sed
결합합니다 .
- 검색
href="URL"
단위 \(
\)
그룹으로 URL 부분을 둘러싸세요 .\1\n
URL 주위에 정의한 그룹을 참조하도록 교체 하고 일치 항목 뒤에 새 줄을 추가합니다.\1
이러한 방식으로 합계를 결합하여 원하는 줄로 구분된 출력(한 줄에 하나의 URL)을 얻습니다 xmllint
.sed
답변2
sed 사용을 고려해 보셨나요?
sed -n 's/.*href="\([^"]*\).*/\1/p'