#1 Le 05/06/2010, à 19: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, à 20:10
- sputnick
Re : [BASH] Problème pour faire un sed sur une variable
...sed retourne une erreur...
Ça serais intéressant de savoir laquelle
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#3 Le 05/06/2010, à 20: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, à 20: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, à 20:47)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 06/06/2010, à 00: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, à 01: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, à 01: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é
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 ?
Dernière modification par Hizoka (Le 06/06/2010, à 01:19)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#8 Le 06/06/2010, à 02: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, à 02: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, à 03: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
Dernière modification par alej (Le 06/06/2010, à 03:23)
Hors ligne
#11 Le 06/06/2010, à 07: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, à 10:22
- FRUiT
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 ?
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
Dernière modification par FRUiT (Le 06/06/2010, à 10: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, à 10:40
- Hizoka
Re : [BASH] Problème pour faire un sed sur une variable
c'est tres con, au temps pour moi alors
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#14 Le 06/06/2010, à 10: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, à 17: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 ), et les nouveautés de Bash4 , 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, à 17:27)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne