결과 세트에서 속성 이름을 제거하시겠습니까?

결과 세트에서 속성 이름을 제거하시겠습니까?

(과도하게 단순화된) 다음과 같은 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은 어디에 있습니까?hrefa

이 출력 형식을 올바르게 지정하려면 어떻게 해야 합니까?

답변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\nURL 주위에 정의한 그룹을 참조하도록 교체 하고 일치 항목 뒤에 새 줄을 추가합니다.\1

이러한 방식으로 합계를 결합하여 원하는 줄로 구분된 출력(한 줄에 하나의 URL)을 얻습니다 xmllint.sed

답변2

sed 사용을 고려해 보셨나요?

sed -n 's/.*href="\([^"]*\).*/\1/p'

관련 정보