如何用最少的资源从这个文本中提取 URL?

gas*_*ter 1 sed awk perl

输入:

nyeeeeeeeeeeeeeee.txt:sadfsadf
sadjflsajfd:jasdlfjalsfd
foo/asdfsafd.txt:laksjdlfajsfd
Run Code Online (Sandbox Code Playgroud)

输出:

<a href="nyeeeeeeeeeeeeeee.txt">nyeeeeeeeeeeeeeee.txt</a>:sadfsadf
<a href="sadjflsajfd">sadjflsajfd</a>:jasdlfjalsfd
<a href="foo/asdfsafd.txt">foo/asdfsafd.txt</a>:laksjdlfajsfd
Run Code Online (Sandbox Code Playgroud)

所以我需要将 INPUT 转换为 OUTPUT,不同的是 OUTPUT 是“可点击的”,因为这是在一个 HTML 文件中。

问:我如何使用 awk、sed 或 perl 执行此操作?

我知道我可以“逐行读取”,但是最节省资源的方法是什么?(我只需要 1 个解决方案,不适用于所有 sed/awk/等):是分隔符。

man*_*ork 5

严格来说你要求的是:

sed 's/\([^:]\+\)/<a href="\1">\1<\/a>/' input.txt
Run Code Online (Sandbox Code Playgroud)
awk -F ':' -vOFS=':' '$1="<a href=\""$1"\">"$1"</a>"' input.txt
Run Code Online (Sandbox Code Playgroud)
while IFS=':' read -r url text; do echo "<a href=\"$url\">$url</a>:$text"; done < input.txt
Run Code Online (Sandbox Code Playgroud)

但是对于真正的 HTML 生成,您还必须处理 HTML 编码:

perl -MHTML::Entities -pe 's!([^:]+)(.*)!"<a href=\"".($t=encode_entities($1))."\">$t".encode_entities($2)!e' input.txt
Run Code Online (Sandbox Code Playgroud)