Текстовый файл Linkify в Linux

#html #linux #url #awk #printf

#HTML #linux #url #awk #printf

Вопрос:

Я проанализировал все строки, содержащие URL-адреса из текстового файла, и добавил разрывы строк, и я хочу сделать ссылки интерактивными в новом файле.

Как мне добавить <a href> теги только к URL-адресам, используя стандартные инструменты Linux, предпочтительно awk? Он должен быть автоматизирован в cron.

Например,

исходный файл chaturls.txt:

     12:30 <user> check this: https://link.to/stuff.jpg</br>
    13:47 <user4> https://another.link.lol eyyyy</br>
  

желаемый результат в новом файле, 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>
  

Я пытался awk '{printf "<a href="%s">%s</a><br>", $0,$0}' chaturls.txt > chatlinkified.html , но это делает всю строку (недопустимой) интерактивной ссылкой.

Ответ №1:

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

Вы можете использовать sed и ссылаться на соответствующую группу с 1 помощью . NB . здесь я разделяю, используя @ вместо / (как в s / ../ ../g ), вы можете использовать любой символ, и это экономит некоторые экранирования.

Регулярное выражение для поиска URL-адреса выполняет некоторые проверки проверки первого символа после https?://, а затем продолжает сопоставление до пробела или начальной скобки другого тега.

Вы можете, если хотите, использовать более простое регулярное выражение для URL-адреса, указанного в одном из комментариев https?://[^ ]*) , который не включает эту небольшую проверку.

Вы можете найти более подробное проверенное регулярное выражение url здесь: https://mathiasbynens.be/demo/url-regex (Но вы должны преобразовать регулярное выражение PHP в расширенное регулярное выражение sed)

Комментарии:

1. Можете ли вы добавить несколько комментариев о своем регулярном выражении? Я остановился, когда получил какой-то ответ, выглядящий нормально, при выполнении sed -E 's@(https?://[^ ]*)@<a href="1">1</a>@g' chaturls.txt 😉