Linux 中的 Linkify 文本文件

Swa*_*per 3 html linux url awk printf

我已经解析了文本文件中包含 url 和附加换行符的所有行,并且我想让链接在新文件中可单击。

如何<a href>使用标准 Linux 工具(最好是 awk)仅在 url 周围附加 -tags?它需要在 cron 中实现自动化。

例如,

源文件chaturls.txt

    12:30 <user> check this: https://link.to/stuff.jpg</br>
    13:47 <user4> https://another.link.lol eyyyy</br>
Run Code Online (Sandbox Code Playgroud)

新文件chatlinkified.html中的所需输出:

12:30 <user> check this: <a href='https://link.to/stuff.jpg'>https://link.to/stuff.jpg</a></br>
13:47 <user4> <a href='https://another.link.lol'>https://another.link.lol</a> eyyyy</br>
Run Code Online (Sandbox Code Playgroud)

我尝试过awk '{printf "<a href=\"%s\">%s</a><br>", $0,$0}' chaturls.txt > chatlinkified.html,但这使得整行成为(无效)可点击链接。

Hie*_*nga 5

sed -E 's@(https?://[^[:space:]/$.?#].[^[:space:]<]*)@<a href="\1">\1</a>@g' chaturls.txt > chatlinkified.html
Run Code Online (Sandbox Code Playgroud)

您可以使用 sed 并使用 引用回匹配的组\1。注意。在这里,我使用 @ 而不是 / 进行分隔(如 s/../../g 中),您可以自由使用任何字符,这可以节省一些转义。

用于查找 URL 的正则表达式会对 https?:// 之后的第一个字符进行一些验证检查,然后继续匹配,直到出现空格或另一个标记的起始括号。

如果您想对 url 使用更简单的正则表达式,例如评论之一中给出的https?://[^ ]*)不包含此小验证的情况,则可以。

您可以在这里找到更广泛的经过验证的 url 正则表达式: https: //mathiasbynens.be/demo/url-regex(但是您必须从 PHP 正则表达式转换为 sed 扩展正则表达式)