Bonjour à tous,
J'ai un script qui fait pas mal de chose mais en autre récupère du contenu dans un fichier puis le réinjecte dans un autr.
Mais j'ai une erreur dès que je fichier source contient un saut de ligne.
Je dois avoir un problème de syntaxe.
Si un âme charitable pouvais me donner un coup de mains.
mentionlegale=$(<$BASEPBNMENTION$(( ( RANDOM % $countmention ) + 1 ))'.php')
find ./ -type f -exec sed -i -e "s/<!--mentionlegalecontent-->/$mentionlegale/g" {} \;
# soignes un peu tes demandes...
Posté par freem . Évalué à 4.
Franchement, lire la doc pour intégrer correctement ton code ne t'aurais pas tué… m'enfin, bref…
Commences par rendre tes variables lisibles, les _ pour simuler les ' ' c'est top, pour ça. Aussi, définit-toi une convention de nommage et tiens-y-toi. Si tu retouches un code d'autrui, alors la convention d'origine est celle à suivre, qu'elle te plaise ou pas.
Pour finir, vu que ton truc me semble imbuvable, pourquoi tu ne te contentes pas de sourcer, aka inclure, le fichier que tu veux importer?
PS: conseil, ne mélange pas l'anglais et le français dans un source, ça rend juste les choses moins lisibles pour les praticiens d'une langue, de l'autre, ou des deux.
PPS: tu es conscient que ne pas utiliser de guillemets simples implique que tes caractères spéciaux, genre le $, seront interprétés par le shell d'origine? >, <, !, sont aussi des caractères spéciaux, en fonction du shell d'origine….
[^] # Re: soignes un peu tes demandes...
Posté par gotcha5832 . Évalué à -2.
Merci pour ce cours,
Je reconnais que ce code est très sale
Je l'ai retravaillé, en vu du partage.
La convention de nommage adoptée est le CamelCase
Sourcer, aka inclure, n'est pas ce qui est recherché. puisque le script produit un contenu statique de type html.
En revanche, je n'ai pas vu le début d'une réponse pour mon problème. A moins que ce soit le PPS?MentionLegale=$(<$BasePbnMention$(( ( RANDOM % $CountMention ) + 1 ))'.php')
find ./ -type f -exec sed -i -e "s/--MentionLegaleContent--/$MentionLegale/g" {} \;
Auquel cas:
me retourne:find ./ -type f -exec sed -i -e 's/--MentionLegaleContent--/'$MentionLegale'/g' {} \;
sed: -e expression n°1, caractère 32: commande `s' inachevée
[^] # Re: soignes un peu tes demandes...
Posté par fearan . Évalué à 4.
c'est marrant de jouer avec sed,
C'est bien d'avoir des variable dans sed, ça permet un code plus lisible
par contre dans le cas où la variable contient des caractère particuliers on peut avoir des blague ;)
il n'y aurait pas un / dans $MentionLegale?
Auquel cas il faudrait mieux user
ou n'importe quel autre caractère que ù, mais ce dernier n'étant utilisé que dans un seul mot en langue française, il y a peu de chance de tomber dessus par accident, et en plus il est très facilement accessible ;)
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: soignes un peu tes demandes...
Posté par gotcha5832 . Évalué à 1.
Merci @fearan pour ton aide.
Je ne suis pas du tout un pro de bash donc si tu a une meilleur suggestion je prends.
$MentionLegale peux en effet contenir un /
Mais mon souci semble vraiment venir du saut de ligne
J'ai néanmoins testé ta suggestion, te le remplacement n'a pas lieu, et j'ai le message:
sed: -e expression n°1, caractère 2: delimiter character is not a single-byte character
[^] # Re: soignes un peu tes demandes...
Posté par fearan . Évalué à 2. Dernière modification le 17 avril 2019 à 13:52.
ah pas de bol t'est en utf-u pas en iso-8859-15 ;)
tu peux tenter avec #, %, µ, ~ enfin n'importe quel caractère qui n'est pas dans mention légale ;)
pour savoir si le caractère en question est (ou non) sur 1 seul octet
tu tapes
cela te donnera le code hexadécimal du caractère
où tu vois que le caractère ù prends un octet deuxième ligne, et a pour valeur f9
en utf-8
cela vaut effectivement b9c3 (2 octets )
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: soignes un peu tes demandes...
Posté par fearan . Évalué à 2.
ah pas de bol t'est en utf-u pas en iso-8859-15 ;)
tu peux tenter avec #, %, µ, ~ enfin n'importe quel caractère qui n'est pas dans mention légale ;)
pour savoir si le caractère en question est (ou non) sur 1 seul octet
tu tapes
cela te donnera le code hexadécimal du caractère
où tu vois que le caractère ù prends un octet deuxième ligne, et a pour valeur f9
en utf-8
enfin tu peux avoirs un soucis si le fichier sources contient des sauts le lignes; il faut pour cela les remplacer lors de la première lecture
puis les remettre en place lors de la deuxième passe
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: soignes un peu tes demandes...
Posté par gotcha5832 . Évalué à 1.
je te remercie,
Mais décidemment lorsque je remplace le saut en première lecture celà me retourne un variable vide?
lancement du scripte
[^] # Re: soignes un peu tes demandes...
Posté par fearan . Évalué à 2. Dernière modification le 17 avril 2019 à 15:58.
il vaut mieux mettre des " autour :
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: soignes un peu tes demandes...
Posté par gotcha5832 . Évalué à 1.
:( Snif, Idem
[^] # Re: soignes un peu tes demandes...
Posté par fearan . Évalué à 2.
encore un petit soucis, une erreur de ma part
remplacer le MentionLegale…
par
en effet, on ne prends plus le contenu du fichier, mais le cat fich|sed, ou pour éviter un uuoc sed … fichier :)
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: soignes un peu tes demandes...
Posté par gotcha5832 . Évalué à 1.
Je te remercie.
Ca avance.
J'ai enfin réussit mais…
- Il a fallut que je passe par un fichier intermédiaire
- pas encore réussit à remettre les saut de ligne après
Sans le fichier intermédiaire (mention.tmp) j'ai le message : sed: -e expression n°1, caractère 155: commande `s' inachevée
Je suppose que tout mon prèblème viens d'un problème d'encodage
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.