파일에서 URI를 추출하는 방법

파일에서 URI를 추출하는 방법

특정 수의 파일에서 모든 URI를 추출하는 방법은 무엇입니까 magnet: file:? 각 줄에 URI가 출력으로 포함되기를 원합니다. 이를 달성하기 위해 bash를 사용하고 싶지만 어떤 제안이라도 환영합니다. 저는 데비안 7을 사용하고 있습니다.

입력은 임의의 이름을 가진 HTML 파일 묶음입니다. URI는 모두 a hrefHTML 태그로 되어 있습니다(예: ) <a href='magnet:?xt=something1:something1:somerandomcharacters'>link text</a>. 각 파일에 URI가 저장되는 방식에 대한 체계는 없습니다.N파일의 어느 위치에나 위치할 수 있는 각 파일의 URI입니다.

예상되는 출력은 줄바꿈으로 구분된 값이 포함된 목록이어야 합니다. 예를 들면 다음과 같습니다.

magnet:?xt.......
magnet:?xt.......
magnet:?xt.......

답변1

URI가 공백으로 끝나는 것 같습니다.grep -o 'magnet://[^ ]*' filename

고쳐 쓰다:grep -o "magnet:?xt[^']*" filename

고쳐 쓰다: cat * | grep -o "magnet:?xt[^']*"또는grep -oh "magnet:?xt[^']*" *

답변2

을 사용하려면 GNU grep다음을 시도해 보세요.

$ echo "<a href='magnet:?xt=something1:something1:somerandomcharacters'>link text</a>" | 
grep -oP "magnet.*(?=')"
magnet:?xt=something1:something1:somerandomcharacters

답변3

작은따옴표와 큰따옴표를 구분 기호로 사용할 수 있습니다. 지난 주에는 구분 기호를 전혀 사용하지 않는 사람을 봤습니다. 프로토콜 부분 앞의 문자를 끝 표시기로 사용하려고 하면 실망스러울 수 있습니다. 상대 경로를 가질 수도 있으며 유효한 링크이기도 합니다. a 태그에 href 속성을 포함하거나 img 태그에 src 속성을 포함할 수 있습니다.

올바른 방법은 전체 문서를 html/xml로 구문 분석한 다음 모든 요소를 ​​반복하여 모든 속성을 추출하고 패턴과 값을 일치시키는 것입니다. 상대 경로에 관심이 있는 경우 다운로드에 사용되는 URL로 확장해야 합니다. PHP나 Perl에는 DOM 트리를 구문 분석하는 기능이 있어야 합니다. grep 또는 유사한 기능을 사용하는 다른 모든 솔루션은 일부 URL을 건너뛰거나 조기에 잘릴 수 있습니다.

어쩌면 컬(curl)이나 wget(wget)에는 해당 목록을 생성하는 멋진 기능이 있을 수 있습니다. 아마도 스파이더 모드의 wget일 가능성이 높습니다.

관련 정보