Supprimer mot entre crochets en Shell

Résolu
sebcah -  
sebcah Messages postés 2 Statut Membre -
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 ;)
Configuration: Windows XP
Firefox 2.0.0.14

3 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
    1. sebcah
       
      Merci beaucoup :)

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

      Seb
      0
    2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > sebcah
       
      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
    3. sebcah > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
       
      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
    4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > sebcah
       
      Oups ;-((

      Il suffit de changer l'espace de place :
      sed 's/\[ [^]]*\] //'
      sed 's/\[ [^]]*\] //2'
      ;-))
      0
    5. sebcah > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
       
      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
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
    1. sebcah
       
      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
  3. sebcah Messages postés 2 Statut Membre
     
    Merci ;)
    0