Rechercher : dans
Par :

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

Dernière réponse le 26 nov 2008 à 17:32:38 polo18, le 26 nov 2008 à 10:06:26 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « SED : problème caractères d'échappement ??? » dans :
Sed - Supprimer une ou plusieurs lignes d'un fichier Voir Supprimer une (ou plusieurs) ligne(s) d'un fichier Syntaxe sed '{[/]||[/]}d' sed '{[/][,][/]d' /.../ = délimiteurs n = le numéro de ligne chaîne = la chaîne contenue dans la...
Sed - Introduction à SED - Part III VoirSED - The Stream EDitor - Part III Ce document est une introduction à la pratique et à l'utilisation de l'éditeur de flux "SED", qui essaie de couvrir certaines fonctionnalités assez méconnues, pour ne pas dire "quasi inconnues", qui font de "SED"...
Sed - Introduction à SED - Part II VoirSED - The Stream EDitor - Part II Ce document est une introduction à la pratique et à l'utilisation de l'éditeur de flux "SED", qui essaie de couvrir certaines fonctionnalités assez méconnues, pour ne pas dire "quasi inconnues", qui font de "SED"...
Oracle - Echappement de caractères spéciaux VoirPour certaines requêtes SQL, nous avons besoin de rechercher des chaînes de caractères contenant des caractères spéciaux tels que '%' Dans l'exemple suivant, qui est faux, le besoin est de trouver les enregistrements contenant au milieu le...
Caractères spéciaux HTML VoirCodage des caractères spéciaux Le standard HTML demande de respecter le codage des caractères ASCII 7 bits, c'est-à-dire que les caractères accentués ne sont pas autorisés. Il faut pour cela utiliser un codage particulier. Pour...
LaTeX - Table de caractères VoirSymboles mathématiques Symboles fléchés Lettres grecques Note : certains caractères n'apparaissent pas sous certains navigateurs (notamment certaines versions de Internet Explorer), ils sont remplacés par un carré, la...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...

1

jipicy, le 26 nov 2008 à 12:00:16

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...
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

2

polo18, le 26 nov 2008 à 14:04:03

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

Répondre à polo18

3

jipicy, le 26 nov 2008 à 14:05:05

sed -ne 's§"$b"§"$a"§p'
;-))
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

4

polo18, le 26 nov 2008 à 14:17:27

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

Répondre à polo18

5

polo18, le 26 nov 2008 à 16:35:34

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

Répondre à polo18

6

jipicy, le 26 nov 2008 à 16:45:15

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.
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

7

polo18, le 26 nov 2008 à 17:01:30

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

Répondre à polo18

8

asevere, le 26 nov 2008 à 17:24:01

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)
Une belette, un lapin !?
C'est pas normal!

Répondre à asevere

9

 polo18, le 26 nov 2008 à 17:32:38

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... :(

Répondre à polo18