Convert URLs into HTML links using sed?

后端 未结 5 1307
一生所求
一生所求 2021-01-06 03:45

I\'m wondering if it\'s possible (recommended might be the better word) to use sed to convert URLs into HTML hyperlinks in a document. Therefore, it would look for things li

相关标签:
5条回答
  • 2021-01-06 03:52

    The file contain the following content

    http://something.com

    The following code will give the correct output

    sed -r 's/(.*)/\<a href="\1">\1\<\/a\>/' file
    
    0 讨论(0)
  • 2021-01-06 04:09
    sed -i.bakup 's|http.[^ \t]*|<a href="&">&</a>|'  htmlfile
    
    0 讨论(0)
  • 2021-01-06 04:12

    While you could use sed, and I will typically only use sed if I need something that's write-only (that is, it only needs to work and doesn't need to be maintained).

    I find the Python regular expression library to be more accessible (and gives the ability to add more powerful constructs).

    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))
    

    Personally, I find that much easier to read and maintain.

    0 讨论(0)
  • 2021-01-06 04:14

    This might work.

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

    It depends on the url being followed by a space (which isn't always the case).

    You could do similar for e-mails with.

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

    Those might get you started. I suggest leaving off the -i option to test your output before making the changes inline.

    0 讨论(0)
  • 2021-01-06 04:14

    you can use awk

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

    output

    $ 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>
    
    0 讨论(0)
提交回复
热议问题