#1 Le 16/09/2010, à 19:42
- mydjey
[Résolu] sed Supprimer chaine de caractère sur plusieurs lignes
Bonjour
Dans un fichier texte j'ai un grand nombre d' URL qui se répètent, comme ceci :
<a href="file:///chemin/de/fichier/tres/tres/long/index.html">page1</a><br/>
<a href="file:///chemin/de/fichier/tres/tres/long/page.html">page2</a><br/>
<a href="file:///chemin/de/fichier/tres/tres/long/contact.html">contact</a><br/>
.....
Ce que je souhaite faire c'est supprimer automatiquement une partie de l'url, du genre supprimer : file:///chemin/de/fichier/tres/ (chaine qui se répète dans toute mes url).
J'ai cherché du côté de la commande sed, mais cela n'as pas aboutit je ne connais pas cette commande et je n'ai pas compris comment supprimer un texte sur plusieurs lignes.
Merci d'avance pour vos conseils.
Dernière modification par mydjey (Le 16/09/2010, à 23:50)
Mon site : http://mydjey.eu/
Hors ligne
#2 Le 16/09/2010, à 20:02
- miniSeb
Re : [Résolu] sed Supprimer chaine de caractère sur plusieurs lignes
Ça n'est sûrement pas la meilleure solution, mais en attendant :
$ cat > test
<a href="file:///chemin/de/fichier/tres/tres/long/index.html">page1</a><br/>
<a href="file:///chemin/de/fichier/tres/tres/long/page.html">page2</a><br/>
<a href="file:///chemin/de/fichier/tres/tres/long/contact.html">contact</a><br/>
$ sed -e "s/file:\/\/\/chemin\/de\/fichier\/tres\/tres\/long/./" test
<a href="./index.html">page1</a><br/>
<a href="./page.html">page2</a><br/>
<a href="./contact.html">contact</a><br/>
Les \ permettent d'échapper les / qui sont des caractères spéciaux pour sed
Mais je maintiens qu'il y a sûrement plus efficace comme technique (je ne connais que les bases en sed)
En gros s/// permet de transformer (substitute) les éléments d'un fichier, selon le format :
s/REGEX à remplacer/remplacement/
Dernière modification par miniSeb (Le 16/09/2010, à 20:05)
Hors ligne
#3 Le 16/09/2010, à 20:07
- ehmicky
Re : [Résolu] sed Supprimer chaine de caractère sur plusieurs lignes
Supprimer file=... etc. si c'est toujours des liens href, ça pourrait donner :
sed 's/\(<a href=\"\)[^"]*\(\".*\)/\1\2/g' < FICHIER
Mais tu ferais mieux de jeter un coup d'oeil plus profond à sed, ou du moins à la commande sed 's///' et aux expressions régulières par toi-même
Oops : double post
Edit : je n'avais pas compris l'expression recherchée, ça donnerait effectivement quelque chose bête comme :
sed 's_file:///chemin/de/fichier/tres/tres/long_._' < FICHIER
Edit2 : Par ailleurs, tu n'as pas besoin d'utiliser sed pour une si simple opération, tu peux utiliser des opérateurs Bash qui seront 100 fois plus rapides :
VAR="$(cat FICHIER)"
echo -e "${VAR//file:\/\/\/chemin\/de\/fichier\/tres\/tres\/long/.}"
Dernière modification par ehmicky (Le 16/09/2010, à 20:22)
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#4 Le 16/09/2010, à 21:13
- mydjey
Re : [Résolu] sed Supprimer chaine de caractère sur plusieurs lignes
Merci pour vos réponses les gas, je vais étudier ça.
Mon site : http://mydjey.eu/
Hors ligne
#5 Le 16/09/2010, à 23:45
- mydjey
Re : [Résolu] sed Supprimer chaine de caractère sur plusieurs lignes
Impec j'ai réussi à faire ce que je voulais, en fait c'était une bonne occasion pour moi de découvrir la commande sed.
Vous m'avez mis sur la piste, c'est ce qu'il me fallait.
La page de doc sur sed m'avais échappé je l'ai découvert après avoir posté, elle bien faite, elle aussi m'a aidé.
J'ai utilisé la commande sed comme ceci :
sed -e "s|file:///chemin/de/fichier/tres/tres/long/||" test > test2
Et ça marche du tonnerre, l'utilisation des "|" c'est une astuce que j'ai trouvé là.
Je passe en résolu pour l'instant, je posterais ici si(quand) j'ai(aurais) d'autres questions sur sed.
Merci à vous.
Dernière modification par mydjey (Le 16/09/2010, à 23:47)
Mon site : http://mydjey.eu/
Hors ligne