SED : problème caractères d'échappement ???
polo18
Messages postés
6
Statut
Membre
-
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 :
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 :
par
ou par
J'ai droit a un beau
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
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"> <\/A>/p' "$fich" | sed -e "s#<H2>NOM</H2>##" | sed -e 's#<A NAME="lbAC"> <\/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
A voir également:
- SED : problème caractères d'échappement ???
- Remplacez le mot sed par le mot mais dans tout le texte. combien de caractères contient le document suite à cette modification (en incluant les espaces) ? - Guide
- Sed et ses caprices (ou les miens) ✓ - Forum Linux / Unix
- Comptage des caractères dans Word ✓ - Forum Word
- Sed - Remplacement texte par retour à la ligne ? ✓ - Forum Linux / Unix
- Sed supprimer ligne ✓ - Forum Shell
6 réponses
Salut,
Essaie :
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...
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...............
Un vrai truc de fou cette histoire...............
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
ç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
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...
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...
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 : "
Sinon je ne vois plus trop
A mon avis le seul petit soucis pourrait venir de $b et du mot "français" ecrit comme cela dans $b : "
français" et qui est présent certaines occurences...
Sinon je ne vois plus trop
A tout hasard, j'ai modifié ton script comme suit:
Sinon, je penche pour un problème de nouvelle ligne dans $a (c'est arrivé durant mon test)
for fich in *.php
do
echo 'FICH EST = à : '$fich
nomfichier=$(basename $fich)
a=$(sed -n '/<H2>NOM<\/H2>/,/<A NAME="lbAC"> <\/A>/p' "$fich" | sed -e "s#<H2>NOM</H2>##" | sed -e 's#<A NAME="lbAC"> <\/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
donePour 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)