SED : problème caractères d'échappement ???

polo18 Messages postés 6 Statut Membre -  
polo18 Messages postés 6 Statut Membre -
Bonjour à tous,

Voilà je galère un peu sur un script intégrant SED + GREP + des variables

Voilà mon script, après j'explique :

for fich in *.php
do
echo 'FICH EST = à : '$fich
nomfichier=$(basename $fich)
a=$(sed -n '/<H2>NOM<\/H2>/,/<A NAME="lbAC">&nbsp;<\/A>/p' "$fich" | sed -e "s#<H2>NOM</H2>##" | sed -e 's#<A NAME="lbAC">&nbsp;<\/A>##') # | sed /^$/)

b=$(grep "^<TITLE>.*</TITLE>$" $fich | sed -e 's#<TITLE>##' | sed -e 's#<\/TITLE>##')

sed -e 's/"$b"/"$a"/p' "$fich" > /home/subidz/mantest/man1/man1new/$nomfichier
done


Le but du script est de prendre une zone de texte délimitée par certaines balises précises et d'insérer cette zone de texe entre <title> et </title>

1 - Le problème viendrait du dernier SED (avant le done), quand j'échappe mes variables $a et $b avec des doubles quotes, il ne fait pas la modification demandée.
2 - Quand j'enlève les doubles quotes de $a et $b, il ne fait toujours pas la modification demandée.
3 - Quand je remplace :
sed -e 's/"$b"/"$a"/p'

par
sed -e "s/$b/$a/p"

ou par
sed -e "s/'$b'/'$a'/p"


J'ai droit a un beau
sed: -e expression n°1, caractère 46: commande `s' inachevée


3 - Point important : $a et $b peuvent contenir tous type de caractères (même les spéciaux comme &,#,...)

Voilà, je tourne un peu en rond, si quelqu'un a une piste... je suis preneur bien-sûr... là je vois plus rien... toute remarque sera la bienvenue.

Merci

6 réponses

jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,

Essaie :
sed -e 's§"$b"§"$a"§p'
ou n'importe quel caractère susceptible de ne pas se retrouver dans une des deux chaînes (motif/remplacement) de la commande de substitution...
0
polo18 Messages postés 6 Statut Membre
 
merci jpicy, avec ta solution le script ne génère pas d'erreur mais, par contre, n'exécute pas ce qu'on lui demande, il recrache le fichier comme il l'a trouvé....

Un vrai truc de fou cette histoire...............
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
sed -ne 's§"$b"§"$a"§p'
;-))
0
polo18 Messages postés 6 Statut Membre
 
merci jipicy,

ça m'a créé le fichier de sortie mais vide............. je suis sûr que c'est gros comme une maison en plus.... ça m'ennerve.... grrr
0
polo18 Messages postés 6 Statut Membre
 
juste comme ça, j'ai toujours pas trouvé ce qui coince....

Si une âme charitable veut bien se pencher sur mon cas, et me filer un coup de pate, parce que je vois plus où peut se trouver mon erreur.....

Merci...
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
C'est très difficile de t'aider sans avoir davantage de détails, notamment ce que contiennent les variables $a et $b.

N'ayant pas toutes les données de ton script pour tester il nous est impossible de savoir où ça coince...

Pour commencer affiche avec un "echo" le contenu de chaque variable ainsi que le retour de chaque commande et essaie de voir ce qui cloche, si ce n'est pas confidentiel, affiche le résultat ici.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
polo18 Messages postés 6 Statut Membre
 
je sors $a et $b dans un echo et tout passe nickel... il s'agit de chaînes de caractères normales d'environ 30 caractères.... il y a rien de spécial... de l'alphanumérique de base.

A mon avis le seul petit soucis pourrait venir de $b et du mot "français" ecrit comme cela dans $b : "
fran&ccedil;ais
" et qui est présent certaines occurences...

Sinon je ne vois plus trop
0
asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
 
A tout hasard, j'ai modifié ton script comme suit:
for fich in *.php
do
echo 'FICH EST = à : '$fich
nomfichier=$(basename $fich)
a=$(sed -n '/<H2>NOM<\/H2>/,/<A NAME="lbAC">&nbsp;<\/A>/p' "$fich" | sed -e "s#<H2>NOM</H2>##" | sed -e 's#<A NAME="lbAC">&nbsp;<\/A>##' | sed /^$/d)

b=$(grep "^<TITLE>.*</TITLE>$" $fich | sed -e 's#<TITLE>##' | sed -e 's#<\/TITLE>##')

SED="s/$b/$a/"
sed -e "$SED" "$fich" > ${fich}_2
done
Pour le SED=... j'ai l'habitude de proceder comme ça quand il y a des variables en jeu...

Sinon, je penche pour un problème de nouvelle ligne dans $a (c'est arrivé durant mon test)
0
polo18 Messages postés 6 Statut Membre
 
merci asevere, je vais essayer de creuser cette piste et je reviens dès que j'ai du neuf...
c'est en train de me rendre malade... :(
0