2010-03-22 7 views
3

Je me demande s'il est possible (recommandé que ce soit le meilleur mot) d'utiliser sed pour convertir les URL en hyperliens HTML dans un document. Par conséquent, il rechercherait des choses comme:Convertir des URL en liens HTML en utilisant sed?

http://something.com 

et les remplacer par

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

Toute pensée? Pourrait-il en être de même pour les adresses e-mail?

Répondre

3

Cela pourrait fonctionner.

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

Cela dépend de l'url suivi d'un espace (ce qui n'est pas toujours le cas).

Vous pourriez faire la même chose pour les e-mails avec.

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

Ceux qui pourraient vous aider à démarrer. Je suggère de laisser de côté l'option -i pour tester votre sortie avant de faire les changements en ligne.

+0

fonctionne comme un charme! – polym

0

vous pouvez utiliser awk

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

sortie

$ 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
sed -i.bakup 's|http.[^ \t]*|<a href="&">&</a>|' htmlfile 
0

Pendant que vous pouvez utiliser sed, et je ne généralement utiliser sed si je besoin de quelque chose qui est en écriture seule (qui est, il n'a besoin que de travailler et n'a pas besoin d'être maintenu). Je trouve la bibliothèque d'expressions régulières Python plus accessible (et donne la possibilité d'ajouter des constructions plus puissantes).

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

Personnellement, je trouve cela beaucoup plus facile à lire et à maintenir.

0

Le fichier contient le contenu suivant

http://something.com

Le code suivant donnera la sortie correcte

sed -r 's/(.*)/\<a href="\1">\1\<\/a\>/' file 
+0

Cette réponse est triviale, ne fournit aucune information supplémentaire sur les autres réponses données précédemment et ne produit même pas le code HTML correct pour l'exemple fourni (guillemets manquants). –

+0

Maintenant, c'est donner la bonne réponse. Il donnera aussi les citations. – muruga

+0

pas vraiment. rememeber OP a un document qui a un autre texte. Si vous utilisez (. *), vous remplacerez toute la ligne par un autre texte. – ghostdog74

Questions connexes