Quel est le moyen le plus simple d'enlever tous les retours chariot. \r
à partir d'un fichier sous Unix ?
\r
ne fonctionne qu'avec GNU sed, sinon vous pouvez faire ceci : sed `echo "s/\r//"`
Quel est le moyen le plus simple d'enlever tous les retours chariot. \r
à partir d'un fichier sous Unix ?
Je vais supposer que vous voulez dire les retours de chariot ( CR , "\r"
, 0x0d
) au termine de lignes plutôt qu'à l'aveugle dans un fichier (vous pouvez les avoir au milieu de chaînes de caractères pour ce que j'en sais). En utilisant ce fichier de test avec un CR à la fin de la première ligne uniquement :
$ cat infile
hello
goodbye
$ cat infile | od -c
0000000 h e l l o \r \n g o o d b y e \n
0000017
dos2unix
est la solution à adopter s'il est installé sur votre système :
$ cat infile | dos2unix -U | od -c
0000000 h e l l o \n g o o d b y e \n
0000016
Si pour une raison quelconque dos2unix
n'est pas disponible pour vous, alors sed
le fera :
$ cat infile | sed 's/\r$//' | od -c
0000000 h e l l o \n g o o d b y e \n
0000016
Si pour une raison quelconque sed
n'est pas disponible pour vous, alors ed
le fera, de manière compliquée :
$ echo ',s/\r\n/\n/
> w !cat
> Q' | ed infile 2>/dev/null | od -c
0000000 h e l l o \n g o o d b y e \n
0000016
Si vous n'avez pas cualquier de ces outils installés sur votre boîte, vous avez de plus gros problèmes que d'essayer de convertir des fichiers :-)
Ni l'un ni l'autre sed
ni echo
reconnaître \r
sur MacOs. Dans ce cas, seul printf "\r"
semble fonctionner.
Est-ce que le sed
exemple no fonctionnent comme prévu, étant donné que l'expression de correspondance inclut \n qui est no de la chaîne de caractères à laquelle il est fait référence ? En d'autres termes : ne devrait-il pas être sed 's/\r$//'
?
tr -d '\r' < infile > outfile
Ver tr(1)
Pas génial : 1. ne fonctionne pas en place, 2. peut remplacer \r pas non plus à la fin de vie (ce qui peut ou non être ce que vous voulez...).
1. La plupart des outils unixiens fonctionnent de cette manière, et c'est généralement la façon la plus sûre de procéder, car si vous vous plantez, vous avez toujours l'original. 2. La question telle qu'elle est formulée est de supprimer les retours chariot, et non de convertir les fins de ligne. Mais il y a beaucoup d'autres réponses qui pourraient mieux vous servir.
Si votre tr
ne prend pas en charge le \r
s'échapper, essayer '\015'
ou peut-être un littéral '^M'
(dans de nombreux shells sur de nombreux terminaux, ctrl-V ctrl-M produira un caractère ctrl-M littéral).
Il y a un utilitaire appelé dos2unix qui existe sur de nombreux systèmes, et peut être facilement installé sur la plupart d'entre eux.
Le lien est maintenant désactivé, veuillez visiter http://dos2unix.sourceforge.net/ au lieu de
sed -i s/\r// <filename>
ou autre ; voir man sed
ou la multitude d'informations disponibles sur le web concernant l'utilisation de la technologie de l'information. sed
.
Il convient de préciser la signification exacte de "retour chariot" dans le texte ci-dessus. Si vous voulez vraiment parler du caractère de contrôle unique "retour chariot", le modèle ci-dessus est correct. Si vous voulez dire, plus généralement, CRLF (retour chariot et un saut de ligne, qui est la façon dont les sauts de ligne sont implémentés sous Windows), alors vous voulez probablement remplacer \r\n
à la place. Les sauts de ligne nus (newline) dans Linux/Unix sont les suivants \n
.
J'essaie d'utiliser --> sed 's/ \r\n /=/' countryNew.txt > demo.txt ce qui ne fonctionne pas. "tigre" "lion".
Doit-on en déduire que vous êtes sur un Mac ? J'ai remarqué que Darwin sed semble avoir des commandes et des fonctionnalités différentes par défaut de la plupart des versions de Linux...
Pour info, le s/\r//
ne semble pas supprimer les retours chariot sous OS X, mais les retours littéraux. r
à la place. Je ne suis pas encore sûr de la raison de ce phénomène. Peut-être cela a-t-il quelque chose à voir avec la façon dont la chaîne est citée ? Pour contourner ce problème, vous pouvez utiliser CTRL-V + CTRL-M
à la place de \r
semble fonctionner.
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.
3 votes
Parlez-vous de l'un ou l'autre ? \r ' ' \n ou simplement le méchant \r 's ?
0 votes
En rapport : grep pour trouver les fichiers qui contiennent ^M (retour chariot de Windows) .