J'ai un fichier d'identifiants séparés par des virgules. J'essaie de remplacer les virgules par une nouvelle ligne. J'ai essayé :
sed 's/,/\n/g' file
mais cela ne fonctionne pas. Que me manque-t-il ?
J'ai un fichier d'identifiants séparés par des virgules. J'essaie de remplacer les virgules par une nouvelle ligne. J'ai essayé :
sed 's/,/\n/g' file
mais cela ne fonctionne pas. Que me manque-t-il ?
Il ne fonctionne pas dans le shell bash $ tr , ' \n ' aitr utilisation : tr [-Ccsu] string1 string2 tr [-Ccu] -d string1 tr [-Ccu] -s string1 tr [-Ccu] -ds string1 string2
Utilisez un Chaîne citée ANSI-C $'string'
Vous avez besoin d'un backslash-escaped literal newline pour arriver à sed. Dans bash au moins, $''
Les chaînes de caractères remplaceront \n
avec une vraie nouvelle ligne, mais vous devez alors doubler la barre oblique inverse que sed verra pour échapper à la nouvelle ligne, par ex.
echo "a,b" | sed -e $'s/,/\\\n/g'
Note cela ne fonctionnera pas sur toutes les coquilles mais elle fonctionnera sur les plus courantes.
Étrange, il fonctionne également avec une barre oblique inverse en moins, à savoir echo "a,b" | sed -e $'s/,/\\n/g
.
Approuvé. Pour plus d'informations, consultez la section "CITATION" du site Web de l'UE. man bash
.
J'ai réussi à le faire fonctionner avec OSX 10.11 : sed -E $'s/<\\/br>/\\\n/g' file
pas besoin d'installer gnu-sed
Merci pour cela - Je me demandais pourquoi mon ancienne astuce linux ne fonctionnait pas sous OSX. Mais ça marche !
Notez que la barre oblique inversée s'échappe le saut de ligne littéral (pour qu'il ne soit pas un terminateur de commande) : il est pas un caractère de continuation de ligne (comme dans bash, etc.). Pour voir la différence, essayez d'écrire la commande ci-dessus sans les guillemets : la barre oblique inversée sera interprétée par l'interpréteur de commandes comme un caractère de continuation de ligne et elle et la nouvelle ligne seront ignorées. Inversement, incluez le contenu de l'expression citée (sans guillemets) dans un fichier séparé comma-to-newline.sed (qui élimine la syntaxe de l'interpréteur de commandes), et ça marche !
Apparemment \r
est la clé !
$ sed 's/, /\r/g' file3.txt > file4.txt
Transformé ceci :
ABFS, AIRM, AMED, BOSC, CALI, ECPG, FRGI, GERN, GTIV, HSON, IQNT, JRCC, LTRE,
MACK, MIDD, NKTR, NPSP, PME, PTIX, REFR, RSOL, UBNT, UPI, YONG, ZEUS
A ceci :
ABFS
AIRM
AMED
BOSC
CALI
ECPG
FRGI
GERN
GTIV
HSON
IQNT
JRCC
LTRE
MACK
MIDD
NKTR
NPSP
PME
PTIX
REFR
RSOL
UBNT
UPI
YONG
ZEUS
Je sais que la question dit OS X, mais cela ne fonctionne pas avec GNU sed-4.2.2-6.fc20.x86_64.
Gardez à l'esprit que \r
n'est pas la même chose que \n
et cela pourrait empêcher la manipulation et l'utilisation ultérieures des données.
Désolé, ça n'a pas marché pour moi. J'ai juste un 'r' là où il devrait y avoir un saut de ligne.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
13 votes
Essayez
tr , '\n'
. Je suppose, sed traite\n
comme du texte brut.1 votes
Ça a marché ! cat file | tr , ' \n '
8 votes
tr , '\n' < file
- pas de tuyau.0 votes
Quel est le
g
à la fin du script pour ? J'obtiens le même comportement sans cela.0 votes
Quel shell utilisez-vous ? Cela fonctionne pour moi, en utilisant le shell bash.
0 votes
Curieusement, cela a bien fonctionné sur mon mac. mais votre question date d'il y a 4 ans.
0 votes
@HelloGoodbye Le
g
remplacera toutes les occurrences d'un caractère, alors qu'une absence deg
ne remplacera que la première instance de ce caractère par ligne.0 votes
Excusez-moi, @PrinceJohnWesley : y a-t-il un avantage à ne pas utiliser de tuyaux ? Peut-être un traitement plus rapide, ou une meilleure gestion de la RAM ?
0 votes
Voir aussi la question inversée : unix.stackexchange.com/questions/114943/