#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
😉