rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

Remplacer un retour à la ligne par un espace

Posté par sheol, le jeudi 20 décembre 2007 à 22:02:16
Bonjour,

Je cherche, avec sed ou un autre bin de base, à remplacer tous les retours à la ligne de mon fichier par un espace.
Je ne comprends pas pourquoi

cat fichier | sed 's/\\n/ /g' ne fonctionne pas

j'en ai essayé des cargaisons, passé un temps fou sur le man et les forums etc ou on décrit pour passer de retour chariot DOS vers UNIX et tout mais impossible de trouver la solution. Je dois etre trop nul.

Je précise que je travaille intégralement en environnement linux. Il n'y a pas d'histoires de conversion DOS. C'est "juste", sous linux, à transformer un retour chariot en un espace.

Si quelqu'un pouvait m'aider s'il vous plait...
Configuration: Linux Fedora
Firefox 2.0.0.10
Répondre à sheol  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le jeudi 20 décembre 2007 à 22:06:45
Salut,
lami20j@debian:~/trash2/vider$ cat a
ligne1
ligne2
ligne3
lami20j@debian:~/trash2/vider$ perl -pi.orig -e 's/\n/ /' a
lami20j@debian:~/trash2/vider$ cat a
ligne1 ligne2 ligne3 lami20j@debian:~/trash2/vider$


lami20j
Répondre à lami20j

2


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
vignemail1, le jeudi 20 décembre 2007 à 22:16:34
cat source.txt|tr "\n" " ">dest.txt
Membre contributeur
Spécialisé réseaux, webmastering, programmation
Répondre à vignemail1

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le jeudi 20 décembre 2007 à 22:23:56
Salut,

Si tu tiens absolument à le faire avec "sed" :
sed -i.BAK ':z;N;s/\n/ /;bz' fichier
;-))

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
man -a man, le jeudi 20 décembre 2007 à 22:33:40
Bonsoir

Votre commande ne peut pas faire ce à quoi vous vous attendiez pourtant. La simple raison est que le caractère \n ne fait pas partie de la chaîne examinée par sed. Une solution serait, avec une boucle while, d'inclure toutes les lignes dans le "pattern buffer" (désolé de l'anglicisme), puis de supprimer ce fameux caractère \n. C'est envisageable pour un petit fichier... car tout el fichier doit tenir en mémoire. C'est donc pas une solution universelle.

Une solution qui marche, mais on peut certainement faire mieux :
awk 'BEGIN {ORS=" "} {print} END {print "\n"}' <fichier>

Explications :
Dans la section BEGIN, on définit le séparateur d'enregistrement en sortie (la variable ORS) à <espace>.
Dans la section principale, pour chaque ligne du fichier en entrée, il n'y a qu'une action : imprime
Dans la section END, pour faire propre, on imprime un retour à la ligne.

(-: un simple "man awk" vous aurait mis sur la piste de cette solution
En espérant que cela serve
Ciao
Répondre à man -a man

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le jeudi 20 décembre 2007 à 22:57:39
Salut,

Votre commande ne peut pas faire ce à quoi vous vous attendiez pourtant. La simple raison est que le caractère \n ne fait pas partie de la chaîne examinée par sed.

Si si ça le fait ;-)


Une solution serait, avec une boucle while, d'inclure toutes les lignes dans le "pattern buffer" (désolé de l'anglicisme), puis de supprimer ce fameux caractère \n.

C'est exactement ce que fait la commande au-dessus ;-)


C'est envisageable pour un petit fichier... car tout el fichier doit tenir en mémoire. C'est donc pas une solution universelle.

Avec GNU sed il n'y a pas de limite au niveau des tampons ;-)

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 sheol, le vendredi 21 décembre 2007 à 07:54:02
Bonjour !

Merci beaucoup pour toutes vos réponses !!! Je vais toutes les étudier en détail.
La solution tr est la plus simple et c'est celle que je vais utiliser dans l'immédiat.

Par contre j'avais en effet imaginé que awk pourrait faire un travail du genre sur mes fichiers mais ... awk ça me fait un peu peur :P donc je m'imaginais la solution très compliquée (à raison ? :) )

J'ouvre un autre topic qui fait suite à celui-ci et surtout à vos réponses.

En tous cas merci !!! :-))

Maximilien.
Répondre à sheol
Logiciels pertinents trouvés dans les téléchargements
Télécharger Clic espace 1.0Clic espace - L'application Clic-Espace permet d'utiliser le clic gauche à la place de la touche espace. L'ergothérapeute Guillaume Hessel...Catégorie: Bureautique
Licence: Freeware/gratuit
Télécharger SuperCopier 2 beta 1.9SuperCopier 2 - SuperCopier est un gestionnaire de copie de fichiers libre pour Windows, proposant des fonctionnalités non couvertes par le...Catégorie: Gestion de fichiers
Licence: Freeware/gratuit
Télécharger Ant Renamer 2.10.0Ant Renamer - ANT Renamer permet de renommer un grand nombre de fichiers et dossiers en quelques clics. Il ne fait que modifier les noms...Catégorie: Gestion de fichiers
Licence: Freeware/gratuit
Télécharger NcFTP 3.2.1NcFTP - NcFTP est un formidable client FTP en ligne de commande disponible pour la quasi-totalité des systèmes d'exploitation....Catégorie: Téléchargement
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « Remplacer un retour à la ligne par un espace »