Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/06/2010, à 20:40

iota76

[BASH] Problème pour faire un sed sur une variable

Bonjour tout le monde!

Voilà j'ai un petit probème qui doit surement se résoudre très facilement, mais débutant actuellement dans l'utilisation de script en BASH je ne maitrîse pas parfaitement toutes les notions.

Mon problème est que je voudrais effectuer un sed sur un variable de cette manière :

avec une chaine du type "Exemple/Test/" dans $BASEDIR

BASEDIRA=`echo $BASEDIR | sed -e 's/\//\\\//g'`

Mais lors de l'éxécution de mon script, la requête sed retourne une erreur...
J'ai essayé directement l'éxécution dans un shell via cette commande : echo Exemple/Test/ | sed -e 's/\//\\\//g'

Et j'obtiens le résultat souhaité, c'est à dire : Exemple\/Test\/

Je vous remercie par avance pour votre aide et si mon post n'est pas au bon endroit milles excuses ^^

Hors ligne

#2 Le 05/06/2010, à 21:10

sputnick

Re : [BASH] Problème pour faire un sed sur une variable

iota76 a écrit :

...sed retourne une erreur...

Ça serais intéressant de savoir laquelle hmm


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#3 Le 05/06/2010, à 21:20

iota76

Re : [BASH] Problème pour faire un sed sur une variable

Bien sûr ^^

sed: -e expression #1, char 16: unknown option to `s'

Hors ligne

#4 Le 05/06/2010, à 21:46

Watael

Re : [BASH] Problème pour faire un sed sur une variable

est-il bien utile de passer par sed ?

basedir="Exemple/Test"
echo "${basedir//\//\\/}"
Exemple\/Test

Dernière modification par Watael (Le 05/06/2010, à 21:47)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 06/06/2010, à 01:59

Hizoka

Re : [BASH] Problème pour faire un sed sur une variable

+1 pour la soluce de Watael, le bash est plus rapide que d'appeler sed...


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#6 Le 06/06/2010, à 02:01

alej

Re : [BASH] Problème pour faire un sed sur une variable

-1 pour la soluce de Watael, à mettre dans un script ... pour voir !

Hors ligne

#7 Le 06/06/2010, à 02:16

Hizoka

Re : [BASH] Problème pour faire un sed sur une variable

bah ca donne :

BASEDIRA=${BASEDIR //\//\\/}

de plus on parle de script bash...

et pour la rapidité : http://forum.ubuntu-fr.org/viewtopic.php?id=359256

perso je ne peux que conseiller l'utilisation de bash pur, car gain de vitesse, et de portabilité

totor a écrit :

il me semblait bien que tu avais lancé un topic à ce sujet.
De façon générale, ce qui peut être fait en full bash est plus rapide que d'utiliser des outils externes. En fait, c'est logique, l'utilisation de awk, sed, grep ... demande la création de processus, réservation de ressources, libération des ressources / processus ce qui est donc du temps en plus. On le voit bien dans mon exemple : le full bash utilise beaucoup moins de ressources système !

je pense que Totor est un gage de qualité non ? tongue

Dernière modification par Hizoka (Le 06/06/2010, à 02:19)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#8 Le 06/06/2010, à 03:31

sputnick

Re : [BASH] Problème pour faire un sed sur une variable

perso je ne peux que conseiller l'utilisation de bash pur, car gain de vitesse, et de portabilité

Non, les parameter expansions ne sont pas portables, en tout cas moins que qu'un sed.
Va faire ca sur du FreeBSD, ca marchera pas, alors que le sed a plus de chance de passer...


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#9 Le 06/06/2010, à 03:57

alej

Re : [BASH] Problème pour faire un sed sur une variable

Heu, moi j'conteste même pas la solution de Watael en tant que telle. C'est juste que si je mets la ligne de commande de iota76 entre "`", ben j'ai le même problème que lui. Bon, en fait, c'est pas grave puisque généralement, j'utilise "$" "(" et ")" et que d'ailleurs, sa substitution fonctionne de facto comme ça (chez moi, en tout cas) mais j'serais quand même bien curieux de savoir pourquoi ça ne fonctionne pas avec "`"...

Hors ligne

#10 Le 06/06/2010, à 04:22

alej

Re : [BASH] Problème pour faire un sed sur une variable

Bon, ben j'crois que j'ai ma réponse (extrait de man bash)...

When the old-style backquote form of substitution  is  used,  backslash
retains  its  literal  meaning except when followed by $, `, or \.

Faut donc échapper les deux backslashs "échappants". Et comme ça, ça marche...

BASEDIRA=`echo $BASEDIR | sed 's/\//\\\\\//g'`

C'est l'heure d'aller au lit big_smile

Dernière modification par alej (Le 06/06/2010, à 04:23)

Hors ligne

#11 Le 06/06/2010, à 08:08

credenhill

Re : [BASH] Problème pour faire un sed sur une variable

hello
avec sed, lorsque l'expression contient un /, utiliser un autre caractère comme séparateur, ça évite des \

$ echo Exemple/Test/ | sed -e 's+/+\\/+g'
Exemple\/Test\/
$

Hors ligne

#12 Le 06/06/2010, à 11:22

FRUiT

Re : [BASH] Problème pour faire un sed sur une variable

Hizoka a écrit :

bah ca donne :

BASEDIRA=${BASEDIR //\//\\/}

de plus on parle de script bash...

et pour la rapidité : http://forum.ubuntu-fr.org/viewtopic.php?id=359256

perso je ne peux que conseiller l'utilisation de bash pur, car gain de vitesse, et de portabilité

totor a écrit :

il me semblait bien que tu avais lancé un topic à ce sujet.
De façon générale, ce qui peut être fait en full bash est plus rapide que d'utiliser des outils externes. En fait, c'est logique, l'utilisation de awk, sed, grep ... demande la création de processus, réservation de ressources, libération des ressources / processus ce qui est donc du temps en plus. On le voit bien dans mon exemple : le full bash utilise beaucoup moins de ressources système !

je pense que Totor est un gage de qualité non ? tongue

Scuse mais bash est beaucoup moins portable que SH par exemple, et ce même si totor a parfaitement raison sur la vitesse d'exécution et l'économie des ressources, enfin il me semble.
Je dirais même que bash est loin d'être le meilleur choix pour la portabilité.

[EDIT] dsl sputnick j'ai raté ton post smile

Dernière modification par FRUiT (Le 06/06/2010, à 11:32)


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#13 Le 06/06/2010, à 11:40

Hizoka

Re : [BASH] Problème pour faire un sed sur une variable

c'est tres con, au temps pour moi alors smile


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#14 Le 06/06/2010, à 11:48

FRUiT

Re : [BASH] Problème pour faire un sed sur une variable

C'est pas con mais faut juste ne pas confondre économie de processus/ressources et portabilité vers d'autres systèmes.

D'une manière générale moi j'essaye TOUJOURS en sh d'abord. Si sh est trop limité, alors j'utilise bash mais le cas se présente assez rarement vu les scripts que j'écris (simples).


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#15 Le 06/06/2010, à 18:25

Watael

Re : [BASH] Problème pour faire un sed sur une variable

Les Remplacements des paramètres sont portables. Au moins, ils sont inscrits dans SUSv4 (=~POSIX).
Sauf celui-là justement (pas de chance sad ), et les nouveautés de Bash4 smile, mais il fonctionne avec Ksh, Zsh, pour ceux que j'ai pu tester.

La portabilité... je m'en entrechoque les noix de coco (prétentieux!!! ^^) : tous mes utilisateurs, même sur FreeBSD, utilisent bash; et le sujet est :

[BASH] Problème pour faire un sed sur une variable

or, en bash faire un sed pour une aussi simple substitution est du gâchis.

Dernière modification par Watael (Le 06/06/2010, à 18:27)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne