我在这里看到了很多答案,但它们(主要)是关于 HTML 文件的,就我而言,我没有 HTML 文件,只有一个 2GB 文件,其中包括我想要提取的随机数据和 URL,但是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 支持它,为了一点额外的约束,在太\<
之前添加一个字边界(例如在 GNU grep 中)http
。
答案2
阅读man grep
并做类似的事情
grep -o -E 'https?://[^"]+' the_file