#1 Le 22/01/2009, à 08:48
- usky
Script bash : supprimer le 1er et le dernier carractere d'une variable
Bonjour,
Je suis en train de me faire un petit srcipt (je deviens accros !) dans lequel je dois transformer une variable sous cette forme : [IMG_1234] en IMG_1234. Il faut donc que j'enlève le 1er et le dernier carractère qui sont toujours [ et ].
J'ai pensé à ${var:1:8} mais je ne connais pas forcement la longueur de la chaine de carractere...
Avez vous une idée ?
Un PC Desktop Sous Ubuntu 12.04 Unity + acer1410 sous Unity Plus de windows depuis 2007 Le PC acer est sous Windows7... Ubuntu ne marche plus correctement depuis la 12.04...
http://parrains.linux.free.fr/
Hors ligne
#2 Le 22/01/2009, à 08:52
- DoK
Re : Script bash : supprimer le 1er et le dernier carractere d'une variable
utilise sed
echo ${var} | sed "s/\[//g" | sed "s/\]//g"
pas la peine alors de s'inquiéter de la longueur de la variable
Dernière modification par DoK (Le 22/01/2009, à 08:52)
Hors ligne
#3 Le 22/01/2009, à 09:17
- Ras'
Re : Script bash : supprimer le 1er et le dernier carractere d'une variable
Tu as plein de solutions à ce problème.
Tu peux voir du coté de cut :
echo $i | cut -f2 -d "[" | cut -f1 -d "]"
Mais c'est lourd...
Ou du coté de sed :
echo $i | sed 's/\[//' | sed 's/\]//'
( le \ est la pour échaper le caractère [ )
( tu peux regarder avec des expressions régulières pour faire ça en une fois d'ailleurs )
En parlant d'expression régulière, est ce que c'est toujours de la forme [IMG_CHIFFRES] ?
Par ce que dans ce cas tu peux faire :
echo $i | grep -o "IMG_[0-9]*"
Qui est, à mon goût le plus joli.
Je te laisse à tes "man" pour comprendre le sens de toutes ces fonctions, et si tu as un problème de compréhension malgrès ça, hésites pas à demander
Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
Les types awesome n'ont rien à prouver. À personne.
'k bye là
Hors ligne
#4 Le 22/01/2009, à 10:36
- Totor
Re : Script bash : supprimer le 1er et le dernier carractere d'une variable
des solutions sans tenir compte du texte :
#!/bin/bash
# avec tr
variable="[quelquechose]"
echo $(tr -d '[-]' <<< ${variable})
# avec sed
echo $( sed 's/^\[\(.*\)\]$/\1/' <<< ${variable})
echo $(sed 's/\[\|\]//g' <<< ${variable})
# en bash
echo ${variable:1:$((${#variable}-2))}
Comme l'a indiqué Ras', il y a plein de solutions...
mais la plus "performante" est la dernière que je propose car elle utilise directement les possibilités du bash....
-- Lucid Lynx --
Hors ligne
#5 Le 22/01/2009, à 20:07
- usky
Re : Script bash : supprimer le 1er et le dernier carractere d'une variable
Tout d'abord merci à tous pour vos nombreuses réponses
j'ai trouvé mon bonheur dans vos propositions mais j'essaye de les comprendre maintenant ...
J'avais fait un essai avec sed mais sans utiliser le \ avant le [ .... grrrr
Dok ta proposition avec sed se termine par un g, ce que ne propose pas Ras, pourquoi ?
totor, pourrais tu expliquer la signification du "<<<" avant la variable, c'est juste pour injecter la variable dans la fonction ?
Un PC Desktop Sous Ubuntu 12.04 Unity + acer1410 sous Unity Plus de windows depuis 2007 Le PC acer est sous Windows7... Ubuntu ne marche plus correctement depuis la 12.04...
http://parrains.linux.free.fr/
Hors ligne
#6 Le 22/01/2009, à 21:15
- Ras'
Re : Script bash : supprimer le 1er et le dernier carractere d'une variable
Sans le g à la fin, il ne remplace qu'une occurence, donc il faut le mettre pour remplacer toutes les occurences d'un texte, dans ton cas on s'en fout vu qu'il ne faut le remplacer qu'une fois, c'est pour ça que t'as le même résultat... C'est vrai que j'ai pas trouvé ça dans le man, cependant c'est expliqué ici : http://www.grymoire.com/Unix/Sed.html#uh-6
Rien de tel qu'un exemple :
ras@ras-laptopoulos:~$ i="cette phrase est vraiment une phrase de merde"
ras@ras-laptopoulos:~$ echo $i
cette phrase est vraiment une phrase de merde
ras@ras-laptopoulos:~$ echo $i | sed 's/phrase/casserole/'
cette casserole est vraiment une phrase de merde
ras@ras-laptopoulos:~$ echo $i | sed 's/phrase/casserole/g'
cette casserole est vraiment une casserole de merde
Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
Les types awesome n'ont rien à prouver. À personne.
'k bye là
Hors ligne
#7 Le 22/01/2009, à 21:22
- Grunt
Re : Script bash : supprimer le 1er et le dernier carractere d'une variable
J'apprends les regexp et l'usage de sed avec Ras'
#8 Le 22/01/2009, à 21:35
- Link31
Re : Script bash : supprimer le 1er et le dernier carractere d'une variable
echo ${var//[\[\]]/}
Qui trouvera plus court ?
edit : bien sûr ça ne marche que si les [ ] ne sont présents qu'au début et à la fin du texte, mais ça n'a pas l'air de poser problème dans le cas présent.
Dernière modification par Link31 (Le 22/01/2009, à 21:39)
Hors ligne
#9 Le 22/01/2009, à 21:38
- Totor
Re : Script bash : supprimer le 1er et le dernier carractere d'une variable
Tout d'abord merci à tous pour vos nombreuses réponses
j'ai trouvé mon bonheur dans vos propositions mais j'essaye de les comprendre maintenant ...
J'avais fait un essai avec sed mais sans utiliser le \ avant le [ .... grrrrDok ta proposition avec sed se termine par un g, ce que ne propose pas Ras, pourquoi ?
totor, pourrais tu expliquer la signification du "<<<" avant la variable, c'est juste pour injecter la variable dans la fonction ?
L'utilisation de <<< a le même objectif que "echo ${variable}|"
mais présente les avantages suivant :
- plus rapide que le "echo... " (du fait de la raison qui suit)
- pas de création de 2 processus (du fait de l'utilisation de |)
-- Lucid Lynx --
Hors ligne
#10 Le 22/01/2009, à 21:39
- Totor
Re : Script bash : supprimer le 1er et le dernier carractere d'une variable
echo ${var//[\[\]]/}
Qui trouvera plus court ?
edit : bien sûr ça ne marche que si les [ ] ne sont présents qu'au début et à la fin du texte, mais ça n'a pas l'air de poser problème dans le cas présent.
bien vu
-- Lucid Lynx --
Hors ligne
#11 Le 22/01/2009, à 21:48
- Ras'
Re : Script bash : supprimer le 1er et le dernier carractere d'une variable
J'apprends les regexp et l'usage de sed avec Ras'
Un lien qui m'avait un peu aidé lors de mon apprentissage des regexp : http://www.funix.org/fr/unix/expr-sed.htm
Sinon y'en a des millions d'autres mais là tu cherches
Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
Les types awesome n'ont rien à prouver. À personne.
'k bye là
Hors ligne
#12 Le 22/01/2009, à 22:16
- Alain.g
Re : Script bash : supprimer le 1er et le dernier carractere d'une variable
echo ${var//[\[\]]/}
Qui trouvera plus court ?
trois de moins
echo ${var//[][]}
Xubuntu Karmic !
Hors ligne
#13 Le 22/01/2009, à 22:39
- Ras'
Re : Script bash : supprimer le 1er et le dernier carractere d'une variable
Sinon, au delà de toutes les solutions possibles et imaginables, l'important est de comprendre
La meilleure solution est celle que tu préfère après, tu programmes pas compiz-fusion, t'es pas à la recherche de la microseconde ou du pourmille d'utilisation CPU
Par exemple, j'utiliserais pas le truc avec var dans un de mes script parce que je l'ai pas encore compris... d'ailleurs si quelqu'un pouvais expliquer
Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
Les types awesome n'ont rien à prouver. À personne.
'k bye là
Hors ligne
#14 Le 23/01/2009, à 11:54
- Totor
Re : Script bash : supprimer le 1er et le dernier carractere d'une variable
Par exemple, j'utiliserais pas le truc avec var dans un de mes script parce que je l'ai pas encore compris... d'ailleurs si quelqu'un pouvais expliquer
Cette notation fait partie des possibilités de remplacement de paramètre du bash.
Dans notre cas (${var//[][]}), il s'agit des possibilités de substitution :
La syntaxe générale de substitution est ${param/pattern/texte} ou ${param//pattern/texte}
Différence entre / et // :
/ : la bash substitue uniquement la première occurence de "pattern" par "texte"
// : la bash substitue toutes occurences de "pattern" par "texte"
Si "texte" est omis, "pattern" est supprimé.
A noter que "pattern" est interprété de la même façon que l'expansion de noms de fichier (et non comme une expression régulière regex)
Je t'invite à consulter le man bash (français) pour plus de détails et notamment les sections
Remplacement des paramètres
Développement des noms de fichiers
-- Lucid Lynx --
Hors ligne
#15 Le 23/01/2009, à 12:01
- Ras'
Re : Script bash : supprimer le 1er et le dernier carractere d'une variable
Ah cool, l'explication était bonne mais man bash état nécessaire pour comprendre pourquoi tu avais mis [][] (deux fois)
Cool
J'adore ce topic, je me régale.
[/geekerie]
Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
Les types awesome n'ont rien à prouver. À personne.
'k bye là
Hors ligne
#16 Le 29/01/2013, à 17:24
- moreje
Re : Script bash : supprimer le 1er et le dernier carractere d'une variable
Bonjour,
je m'insere dans ce fil, car je suis sur que vous aurez une solution nikel!
j'ai une variable X qui peut contenir soit deux chiffres 15 16 soit deux chiffres entre apostrophes '15 16'
pour le déroulement de mon script, j'ai besoin de la forme sans les apostrophes, donc je cherche à faire passer ma variable X dans une commande qui trouverait ces ' et les enlèverait.
vous auriez une piste?
Merci!
***************************
PC NUC Intel I5 - 12 Go RAM
Ubuntu 22.04 x64
+++++++++++++++++
Hors ligne
#17 Le 29/01/2013, à 18:20
- Watael
Re : Script bash : supprimer le 1er et le dernier carractere d'une variable
salut,
regarde dans le man bash Remplacement des paramètres
variable1="36 15"
variable2="'36 17'"
echo "${variable1//\'}"
36 15 36 15
echo "$variable2 ${variable2//\'}"
'36 17' 36 17
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#18 Le 05/12/2020, à 12:39
- laurent Deruaz-Pepin
Re : Script bash : supprimer le 1er et le dernier carractere d'une variable
Pour repondre au plus court à la question initiale: ${var:1} suffit pour enlever le 1er caractère!
Hors ligne