Sed remplacer - par _

Résolu/Fermé
Utilisateur anonyme - 9 juin 2020 à 11:20
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 9 juin 2020 à 12:16
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
A voir également:

4 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
9 juin 2020 à 11:46
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
Utilisateur anonyme
9 juin 2020 à 11:48
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
9 juin 2020 à 11:49
Poste un exemple un peu plus précis de ton fichier afin qu'on puisse adapter…
0
Utilisateur anonyme
9 juin 2020 à 11:53
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
9 juin 2020 à 11:58
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
Utilisateur anonyme
9 juin 2020 à 12:02
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
9 juin 2020 à 12:04
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
9 juin 2020 à 12:16
Sinon, pour simplifier ta syntaxe :
 sed '/.\(-[[:digit:]]*\)\{6\}/{s/-/_/g}' fich
;-))
0