여기에서 많은 답변을 보았지만 (주로) HTML 파일에 관한 것입니다. 제 경우에는 HTML 파일이 없고 추출하려는 임의의 데이터와 URL이 포함된 2GB 파일만 있지만 URL은 때로는 출력에 표시하고 싶지 않은 임의의 데이터/텍스트가 혼합되어 있습니다.
예는 다음과 같습니다.
https://example.com/";}i:41067;a:10:{s:3
답변1
~에 따르면https://stackoverflow.com/a/7109208/1745001URL의 유효한 문자는 다음과 같습니다.
AZ, az, 0-9, -, ., _, ~, :, /, ?, #, [, ], @, !, $, &, ', (, ), *, +, ,, ;, % 및 =
따라서 이것이 사실이라고 가정하면 다음을 시도해 볼 수 있습니다.
grep -o -E "https?://[][[:alnum:]._~:/?#@!$&'()*+,;%=-]+" file
이러한 문자 중 일부는 특정 컨텍스트에만 존재할 수 있기 때문에 여전히 100% 정확하지 않을 수 있지만 아마도 간단한 grep/regexp를 사용하여 수행할 수 있는 최선일 것입니다.
grep이 이를 지원하는 경우 약간의 추가 제약을 위해 \<
t 앞에 단어 경계를 추가하십시오(예: GNU grep에서) http
.
답변2
읽고 man grep
다음과 같은 일을 해보세요
grep -o -E 'https?://[^"]+' the_file