Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

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

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

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. wink

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. smile
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é .

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)

Hors ligne