Sed remplacer - par _

Résolu
Utilisateur anonyme -  
zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

je voudrais remplacer les - par des _ :

S-1-5-21-1119404543-3273515248-2536353511-2784

par

S_1_5_21_1119404543_3273515248_2536353511_2784

En gros je voudrais avoir une formule SED qui lise un fichier contenant des milliers de chaines du type

S-digit-digit-digit-digit-digit-digit-digit
par
S_digit_digit_digit_digit_digit_digit_digit

pourriez-vous m'indiquer la formule ? cela fait un petit moment que je cherche sur sed online mais je galère :x
merci!

Configuration: Windows / Firefox 77.0

4 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    En espérant qu'il n'existe aucun autre tiret ( - ) dans ton fichier…

    sed 's/-/_/g' fichier
    à tester pour voir si la sortie te convient, et si c'est bon, pour une modification du fichier, rajouter "
    -i.bak
    " pour une modification directe avec une sauvegarde au cas ou…

    sed -i.bak 's/-/_/g' fichier


    Exemple :
    $ cat fich
    S-1-5-21-1119404543-3273515248-2536353511-2784

    $ sed 's/-/_/g' fich
    S_1_5_21_1119404543_3273515248_2536353511_2784

    $ cat fich
    S-1-5-21-1119404543-3273515248-2536353511-2784

    $ sed -i.bak 's/-/_/g' fich

    $ cat fich
    S_1_5_21_1119404543_3273515248_2536353511_2784

    $ cat fich.bak
    S-1-5-21-1119404543-3273515248-2536353511-2784


    0
  2. Utilisateur anonyme
     
    et justement si, il y a d'autres - dans le fichiers qui eux sont bon.
    c'est pourquoi justement je cherche à remplacer ce - par un _ spécifiquement dans cette chaine de caractère.

    je connaissais le sed -e 's/-/_/g'
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Poste un exemple un peu plus précis de ton fichier afin qu'on puisse adapter…
      0
  3. Utilisateur anonyme
     
    17-KUILM\KUOLM\3-HECTO PASCAL\3-COMPTE RENDU
    D:PAI(A;OICI;FA;;;BA)(A;OICI;FA;;;SY)(A;OICIIO;FA;;;CO)(A;;0x1200af;;;S-1-5-21-1119404343-3273519248-2536323511-2897)(A;OICIIO;0x1301bf;;;S-1-5-21-1119404343-3273519248-2536323511-2897)

    par

    17-KUILM\KUOLM\3-HECTO PASCAL\3-COMPTE RENDU
    D:PAI(A;OICI;FA;;;BA)(A;OICI;FA;;;SY)(A;OICIIO;FA;;;CO)(A;;0x1200af;;;S_1_5_21_1119404343_3273519248_2536323511_2897)(A;OICIIO;0x1301bf;;;S_1_5_21_1119404343_3273519248_2536323511_2897)
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      C'est toujours le même format ?

      À savoir une séquence entre parenthèses ?
      Suivie d'un A ?
      Avec 3 point-virgule ?
      Suivis d'un S ?

      Ou ça peut être aléatoire ?
      0
  4. Utilisateur anonyme
     
    finalement c'est ok j'ai trouvé :

    voici la formule :
    sed -e 's/\(.\)-\([[:digit:]]*\)-\([[:digit:]]*\)-\([[:digit:]]*\)-\([[:digit:]]*\)-\([[:digit:]]*\)-\([[:digit:]]*\)-\([[:digit:]]*\)/\1_\2_\3_\4_\5_\6_\7/g'

    merci pour tout ( :
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Cool ;-))

      Sinon, tester ça :
      $ sed '/([^)]*)/{s/-/_/g}' fich
      17-KUILM\KUOLM\3-HECTO PASCAL\3-COMPTE RENDU
      D:PAI(A;OICI;FA;;;BA)(A;OICI;FA;;;SY)(A;OICIIO;FA;;;CO)
      (A;;0x1200af;;;S_1_5_21_1119404343_3273519248_2536323511_2897)
      (A;OICIIO;0x1301bf;;;S_1_5_21_1119404343_3273519248_2536323511_2897)
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Sinon, pour simplifier ta syntaxe :
       sed '/.\(-[[:digit:]]*\)\{6\}/{s/-/_/g}' fich
      ;-))
      0