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

big_smile 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 smile


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 wink
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&#039;

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' smile

#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 ? wink

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

usky a écrit :

Tout d'abord merci à tous pour vos nombreuses réponses wink
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 ?

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

Link31 a écrit :
echo ${var//[\[\]]/}

Qui trouvera plus court ? wink

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 wink


-- Lucid Lynx --

Hors ligne

#11 Le 22/01/2009, à 21:48

Ras&#039;

Re : Script bash : supprimer le 1er et le dernier carractere d'une variable

Grand_Grunt a écrit :

J'apprends les regexp et l'usage de sed avec Ras' smile

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 wink


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

Link31 a écrit :
echo ${var//[\[\]]/}

Qui trouvera plus court ? wink

trois de moins cool

echo ${var//[][]}

Xubuntu Karmic !

Hors ligne

#13 Le 22/01/2009, à 22:39

Ras&#039;

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 smile
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 wink

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 wink


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

Ras' a écrit :

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 wink

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&#039;

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 smile


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