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 23/12/2009, à 23:57

maman

[sed]Problème de syntaxe

bonjour,
je modifie mon site internet. Je me suis dit que sed serait un bon outil, sauf que je n'y comprends pas grand chose. Je cherche à insérer une ligne avant une autre, logique.
Et je n'y arrive pas, ma solution de replis est de remplacer une chaine de caractères par une autre

sed -i~ 's#<li><a href="../2009#<li><a href="../2010/2010.html">2010</a></li><li><a href="../2009#' mon_fichier.html

mais tout est à la suite et ça ne me va pas.

J'ai bien vu sur ce tuto qu'il faut utiliser "i" mais comment.
J'ai essayé

sed "#2009#i\<li><a href="../2010/en_2010.html">2010</a></li>\n" mon_fichier.html

ça m'ouvre ma page dans le terminal et c'est tout.
Ce que j'aimerais, c'est que le fichier soit modifié, j'enregistre et zou.

Merci de bien vouloir m'expliquer ce que je foire.


90% of teens today would die if Facebook was completely destroyed. If you are one of the 10% that would be laughing, copy and paste this to your signature.

Hors ligne

#2 Le 24/12/2009, à 00:01

sputnick

Re : [sed]Problème de syntaxe

sed 's@PATTERN@REMPLACEMENT\n&@' <FICHIER>

Si tu veux que le changement soit definitif sans s'afficher sur la sortie standard, ajoute -i :

sed -i ...

Edit: je change le delimiteur / par @ car tu a des / dans ta chaine de caractere.

Dernière modification par sputnick (Le 24/12/2009, à 00:28)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#3 Le 24/12/2009, à 00:31

maman

Re : [sed]Problème de syntaxe

salut,
désolée, je me suis mal faite comprendre, ce n'est pas ce que je veux faire (même si la syntaxe est OK). Je vais mettre le texte en vrai, c'est plus simple.
J'ai ceci:

<li><a href="../2009.html">2009</a></li>

et je voudrais ceci

<li><a href="../2010.html">2010</a></li>
<li><a href="../2009.html">2009</a></li>

Je voudrais que les lignes soient les unes en dessous des autres et pas alignées.
Si j'applique

sed -i~ 's#<li><a href="../2009#<li><a href="../2010.html">2010</a></li><li><a href="../2009#' mon_fichier.html

Tout est aligné.
Le site fonctionne, mais l'écriture est moche.

Comment dois je faire ?


90% of teens today would die if Facebook was completely destroyed. If you are one of the 10% that would be laughing, copy and paste this to your signature.

Hors ligne

#4 Le 24/12/2009, à 00:51

sputnick

Re : [sed]Problème de syntaxe

Ok, super, bizarement en utilisant exactement mon exemple du dessus j'obtient ce que tu veux roll

sed 's@<li><a href="../2009.html">2009</a></li>@<li><a href="../2010.html">2010</a></li>\n&@' <<< '<li><a href="../2009.html">2009</a></li>'


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#5 Le 24/12/2009, à 00:54

sputnick

Re : [sed]Problème de syntaxe

Donc cela modifiera definitivement tes fichier ( backups en .bak ) :
sed  -i.bak 's@<li><a href="../2009.html">2009</a></li>@<li><a href="../2010.html">2010</a></li>\n&@'


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#6 Le 24/12/2009, à 01:19

maman

Re : [sed]Problème de syntaxe

salut,
euh, oui, je ne suis pas forcément très douée pour tout comprendre du premier coup.:/
Je te remercie beaucoup, c'est pile poil ce que je voulais.

J'aimerais comprendre le fonctionnement de cette entrée.
"s" c'est pour remplacer, non ? "-i" sert à insérer 2010 avant 2009 et "\&" est pour le retour à la ligne.

Il y a plein de choses que j'aimerais faire avec sed, mais c'est pas si simple que ça. Bref.
Encore merci.


90% of teens today would die if Facebook was completely destroyed. If you are one of the 10% that would be laughing, copy and paste this to your signature.

Hors ligne

#7 Le 24/12/2009, à 02:21

sputnick

Re : [sed]Problème de syntaxe

bibi_marmotte a écrit :

salut,
Je te remercie beaucoup, c'est pile poil ce que je voulais.

Frais.

bibi_marmotte a écrit :

J'aimerais comprendre le fonctionnement de cette entrée.
"s" c'est pour remplacer, non ? "-i" sert à insérer 2010 avant 2009 et "\&" est pour le retour à la ligne.

Tu t'es faché avec un man ? wink

s = substitution donc on a forcement 3 delimiteurs, dans mon cas @ puis une regex ou une chaine source et use chaine cible apres le deuxieme @. Le -i sert a effectuer mes modifications permanentes comme deja dit dans ce fil.
La base plus trivial de la substitution c'est ça : s/foo/bar/
Le & veulet dire tout ce qui a matché entre les delimiteurs, ( si tu a suivit : @ ) qui correspond à ta ligne contenant 2009.

Dernière modification par sputnick (Le 24/12/2009, à 02:23)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne