Supprimer mot entre crochets en Shell

Résolu/Fermé
sebcah - 5 mai 2008 à 10:41
sebcah Messages postés 2 Date d'inscription lundi 12 mai 2008 Statut Membre Dernière intervention 12 mai 2008 - 12 mai 2008 à 11:25
Salut !

Je chercher à supprimer en Shell le mot [nord] de la ligne (stockée dans la variable $line):

paris [nord] [sud];091

pour n'avoir que :

paris [sud];091

Puis, je souhaiterais faire la même chose avec [sud] :

transformer :

paris [nord] [sud];091

en :

paris [nord];091

Merci ;)
A voir également:

3 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
5 mai 2008 à 10:48
Salut,
[tmpfs]$ echo ${line}
paris [nord] [sud];091

[tmpfs]$ echo ${line} | sed 's/ \^*\]//'
paris [sud];091

[tmpfs]$ echo ${line} | sed 's/ \^*\]//2'
paris [nord];091

[tmpfs]$
;-))
0
Merci beaucoup :)

Mais je n'arrive pas à faire la manip', ça ne fonctionne pas :S

Seb
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897 > sebcah
5 mai 2008 à 11:24
Oups désolé, je n'avais pas fait attention ;-((
La mise en forme n'est pas sortie comme il se devait, il manque des crochets ;-(
Donc essaie comme suit (Attention : il ne faut pas mettre d'espace entre les deux premiers crochets !!!) :
[tmpfs]$ echo ${line} | sed 's/ \[ [^]]*\]//'
paris [sud];091

[tmpfs]$ echo ${line} | sed 's/ \[ [^]]*\]//2'
paris [nord];091

[tmpfs]$
;-))
0
sebcah > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
5 mai 2008 à 11:36
Super ! Merci beaucoup !

Ca marche bien avec cet exemple, mais comment faire la même chose avec :

[savigny] sur [orge];091

et

[paris] [magenta] république;066

??

Merci encore beaucoup <:)

Seb


NB: je cherche à avoir une même ligne de commande pour les trois cas de figure :P
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897 > sebcah
5 mai 2008 à 11:41
Oups ;-((

Il suffit de changer l'espace de place :
sed 's/\[ [^]]*\] //'
sed 's/\[ [^]]*\] //2'
;-))
0
sebcah > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
5 mai 2008 à 11:56
Merci encore !

Ca n'a pas marché cette fois-ci, en revanche j'ai trouvé en bricolant le code /P

pour le premier []
echo $line | sed 's/\^*\]//1'

et pour le second []
echo $line | sed 's/\^*\]//2'

Et voilà :)

Seb

PS :

Si ce n'est pas trop demandé peux tu m'expliquer le fonctionnement de cette ligne de code (je débute en shell)

je connais juste en sed le moyen de changer un mot avec : sed 's/toto/tata/g' et c'est tout.

Alors : ^ et *\] je vois pas tu tout à quoi ça sert.... et pourquoi fallait-il un espace :S ?

Merci :)

Seb
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
5 mai 2008 à 10:54
Salut,

1.
root@debian:~# line='paris [nord] [sud];091'
root@debian:~# echo $line
paris [nord] [sud];091
root@debian:~# line_sud=$(echo $line | sed 's/ \[nord\]//')
root@debian:~# echo $line_sud
paris [sud];091
root@debian:~# line_nord=$(echo $line | sed 's/ \[sud\]//')
root@debian:~# echo $line_nord
paris [nord];091
root@debian:~#
2.
root@debian:~# line='paris [nord] [sud];091'
root@debian:~# line_sud=${line/\[nord\]/}
root@debian:~# line_nord=${line/\[sud\]/}
root@debian:~# echo $line
paris [nord] [sud];091
root@debian:~# echo $line_sud
paris [sud];091
root@debian:~# echo $line_nord
paris [nord] ;091
root@debian:~#


0
Merci ;)

Et si je ne connais pas les mots entre crochets :D ? mais que je veux quand même choisir de supprimer le 1er puis le 2ème...
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569 > sebcah
5 mai 2008 à 11:20
si je ne connais pas les mots entre crochets :D ?

jipicy a anticipé ;-)
http://www.commentcamarche.net/forum/affich 6258687 supprimer mot entre crochets en shell#1
0
sebcah Messages postés 2 Date d'inscription lundi 12 mai 2008 Statut Membre Dernière intervention 12 mai 2008
12 mai 2008 à 11:25
Merci ;)
0