OVH Cloud OVH Cloud

[sed] encore....

5 réponses
Avatar
julien.gautier
Bonjour à tous,

Vous m'aviez déjà aidé pour cela :

> >> chaine origine chaine retournée
> >>
> >> ee'sr ee\'\'s'r
> >
> > sed "s/'./\\\\'\\\\&'/g"
> (pour n'importe quel caractere apres ')
>
> sed "s/'[a-z]/\\\\'\\\\&'/g"
>
> (pour seulement a-z).


Excuse moi d'y revenir mais je n'arrive pas à ajouter le traitement des
accents à la commande (y compris majuscules) :

sed "s/'[a-z]/\\\\'\\\\&'/g"


et l'autre ne semble pas traiter les accents..

Sachant que ce sed s'éxécutera dans un shell sh (ou bash : sous MacOS X)

PArdonnez moi si ma question est trop triviale...

Julien.

5 réponses

Avatar
Stephane Chazelas
2004-07-20, 07:12(+02), Julien Gautier:
[...]
Excuse moi d'y revenir mais je n'arrive pas à ajouter le traitement des
accents à la commande (y compris majuscules) :

sed "s/'[a-z]/\'\&'/g"


et l'autre ne semble pas traiter les accents..

Sachant que ce sed s'éxécutera dans un shell sh (ou bash : sous MacOS X)

PArdonnez moi si ma question est trop triviale...
[...]


Pas triviale, mais pas claire non plus. Est-ce que tu peux
reformuler ton probleme depuis le depart, y compris le contexte.

Il y avait un autre thread ou tu parlais de convertir du texte
d'un jeu de caractere a un autre (a priori), c'est ca que tu
veux dire par "traitement des accents" ?

Ce que j'ai compris jusque la, c'est que tu veux convertir

'e en ''e'

et aussi

é (octet de valeur 0351 ?) en e314201 (où 314 est l'octet de
valeur 0314).

Est-ce que tu veux convertir aussi è en e314200 et « en
302253 ?

Pour quelle raison, dans quel contexte ? Ne peux-tu pas plutot
utiliser perl ?

--
Stephane

Avatar
julien.gautier
Stephane Chazelas wrote:

Excuse moi d'y revenir mais je n'arrive pas à ajouter le traitement des
accents à la commande (y compris majuscules) :

sed "s/'[a-z]/\'\&'/g"


PArdonnez moi si ma question est trop triviale...
[...]


Pas triviale, mais pas claire non plus. Est-ce que tu peux
reformuler ton probleme depuis le depart, y compris le contexte.



Tu as raison, ce n'est pas très clair...

Pour résumer :

je confectionne un petit soft GUI en AppleScript (AppleScriptStudio dans
XCode), qui tournera donc sous mac OS X (10.3).

Celui-ci sert à saisir des données par lots dans une base de données
MySQL qui est par ailleurs (et principalement) utilisée via des
formulaires html/php.

Mais le soft AppleScript lance aussi des commandes shell via la
commande AS "do shell script la_commande" : des sed.

Le problème est d'assurer la conversion correcte de tous les caractères
entre MySQL, PHP, AppleScript, les commandes shell lancées depuis
AppleScript.


En l'occurence, le thread actuel (ici même) porte sur une chaine (un
nom de fichier, potentiellement long et comportant tout caractère)
récupérée par AS (le Finder plus précisément), et qui doit être ensuite
insérée comme chemin de fichier valide dans une commande shell (un cp).

Or, j'ai constaté que mon shell (bash; AS utilise sh, mais il semble que
ce soit pareil) traduit le fichier "l'amour.JPG" par :

l'amour.JPG

D'où un précédent thread, et ta réponse :

sed "s/'[a-z]/\'\&'/g"

Mais j'aimerais pouvoir obtenir cette traduction pour tout caractère
(possible).


Ne peux-tu pas plutot
utiliser perl ?



Je ne connais pas perl, et je trouve que AS + shell + PHP + MySQL +
html, etc., cela fait déjà beaucoup... !!

;-)

Par contre, dans le petit soft de batch, je pourrais peut-être éliminer
les commandes shell et utiliser seulement AS.

Merci pour tes conseils et ton aide.


Avatar
Stephane Chazelas
2004-07-20, 22:14(+02), Julien Gautier:
[...]
Mais le soft AppleScript lance aussi des commandes shell via la
commande AS "do shell script la_commande" : des sed.

Le problème est d'assurer la conversion correcte de tous les caractères
entre MySQL, PHP, AppleScript, les commandes shell lancées depuis
AppleScript.
[...]


Je ne suis pas sur de cerner où se situe le probleme exactement:

Tu lances un script shell avec des arguments ? Ou AS te permet
de lancer une ligne de commande shell ?

Comment les arguments au script sont passés ? Peut-etre peux-tu
passer par des variables d'environnement si le probleme est
d'avoir une ligne de commande correcte au niveau de la syntaxe
shell.

« mon_script l'amour »

est une ligne de commande shell syntactiquement incorrecte car
la ' n'est pas refermee.

Si tu reussis a creer une variable d'environnement MON_FICHER
avec comme valeur "l'amour" (par le putenv ou setenv ou je ne
sais quoi de AS), tu peux alors lancer

« mon_script "$MON_FICHER" »

qui est une ligne de commande shell valide quelque soit le nom
du fichier.

--
Stephane

Avatar
julien.gautier
Stephane Chazelas wrote:


Je ne suis pas sur de cerner où se situe le probleme exactement:

Tu lances un script shell avec des arguments ? Ou AS te permet
de lancer une ligne de commande shell ?



Les deux : par le biais d'AS, je lance des lignes de commandes shell qui
comportent des arguments.


Comment les arguments au script sont passés ? Peut-etre peux-tu
passer par des variables d'environnement si le probleme est
d'avoir une ligne de commande correcte au niveau de la syntaxe
shell.

« mon_script l'amour »

est une ligne de commande shell syntactiquement incorrecte car
la ' n'est pas refermee.

Si tu reussis a creer une variable d'environnement MON_FICHER
avec comme valeur "l'amour" (par le putenv ou setenv ou je ne
sais quoi de AS), tu peux alors lancer

« mon_script "$MON_FICHER" »

qui est une ligne de commande shell valide quelque soit le nom
du fichier.



D'accord, c'est une idée.

Merci bcp.

Avatar
Antoine Bellot

Je ne connais pas perl, et je trouve que AS + shell + PHP + MySQL +
html, etc., cela fait déjà beaucoup... !!

;-)

Par contre, dans le petit soft de batch, je pourrais peut-être éliminer
les commandes shell et utiliser seulement AS.


Si tu utilises déjà PHP côté serveur, il est normalement possible, sur
tout unix, d'utiliser le langage PHP pour écrire des scripts-shells : ce
n'est pas très élégant, mais c'est peut-être intéressant dans ton cas.

$ cat >shell.php <<EOF
#!/usr/bin/php -q
<? print("Hello World") ?>
EOF
$ chmod +x ./shell.php

$ ./shell.php
Hello World[ mkzdk]$

Par ailleurs, PHP supporte les expressions régulières et les expressions
régulières PERL. Tu peux donc faire tout ce que permet sed en PHP.

Ceci dit, il est peut-être plus intéressant encore de normaliser tes
données côté serveur, avant leur insertion dans la base de données, en
utilisant PHP côté serveur.