Конвертировать URL-адреса в HTML-ссылки с помощью sed? - PullRequest
3 голосов
/ 22 марта 2010

Мне интересно, возможно ли (рекомендуется использовать более подходящее слово) использование sed для преобразования URL-адресов в гиперссылки HTML в документе. Следовательно, он будет выглядеть так:

http://something.com

И заменить их на

<a href="http://something.com">http://something.com</a>

Есть мысли? Можно ли сделать то же самое для адресов электронной почты?

Ответы [ 5 ]

3 голосов
/ 22 марта 2010

Это может сработать.

sed -i -e "s|http[:]//[^ ]*|<a href=\"\0\">\0</a>|g" yourfile.txt

Это зависит от того, за каким URL следует пробел (что не всегда так).

Вы можете сделать то же самое для электронной почты с.

sed -i -e "s|\w+@\w+\.\w+(\.\w+)?|<a href=\"mailto:\0\">\0</a>|g" yourfile.txt

Это может помочь вам начать. Я предлагаю отключить опцию -i, чтобы проверить вывод, прежде чем вносить изменения в строку.

0 голосов
/ 22 марта 2010

Файл содержит следующее содержание

http://something.com

Следующий код даст правильный вывод

sed -r 's/(.*)/\<a href="\1">\1\<\/a\>/' file
0 голосов
/ 22 марта 2010

Хотя вы могли бы использовать sed, и я обычно буду использовать sed, только если мне нужно что-то только для записи (то есть, оно только должно работать и не нуждается в обслуживании).

Я считаю, что библиотека регулярных выражений Python более доступна (и дает возможность добавлять более мощные конструкции).

import re
import sys

def href_repl(matcher):
    "replace the matched URL with a hyperlink"
    # here you could analyze the URL further and make exceptions, etc
    #  to how you did the substitution. For now, do a simple
    #  substitution.
    href = matcher.group(0)
    return '<a href="{href}">{href}</a>'.format(**vars())

text = open(sys.argv[1]).read()
url_pattern = re.compile(re.escape('http://') + '[^ ]*')
sys.stdout.write(url_pattern.sub(href_repl, text))

Лично мне гораздо легче читать и поддерживать.

0 голосов
/ 22 марта 2010
sed -i.bakup 's|http.[^ \t]*|<a href="&">&</a>|'  htmlfile
0 голосов
/ 22 марта 2010

вы можете использовать awk

awk '
{
 for(i=1;i<=NF;i++){
   if ($i ~ /http/){
      $i="<a href=\042"$i"\042>"$i"</a>"
   }
 }
} 1 ' file

выход

$ cat file
blah http://something.com test http://something.org

$ ./shell.sh
blah <a href="http://something.com">http://something.com</a> test <a href="http://something.org">http://something.org</a>
...