Sed retours chariots
Résolu
tlep
Messages postés
596
Date d'inscription
Statut
Membre
Dernière intervention
-
tlep Messages postés 596 Date d'inscription Statut Membre Dernière intervention -
tlep Messages postés 596 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je sais que le sujet a déja été abordé en forum, mais je n'y ai pas trouvé ma réponse.
J'ai un fichier dont certaines lignes ont été tronquées.
Chaque ligne non tronquée est identifiée comme se finissant par le signe ">"
Pour réconcilier les lignes, j'applique donc
sed 's/[^>]\n//g' monfichier
Mais là je m'aperçois que le retour chariot n'est pas vu.
Un simple
sed 's/\n//g' monfichier
ne fonctionne pas non plus.
Ou plutôt, il est interprété dans un seul sens :
En effet, si je fais
sed 's/t/\n/g' monfichier
sed remplace bien tous les "t" par un retour chariot.
Par contre
sed 's/\n/t/g' monfichier
sed ne remplace rien !
:-(
je sais que le sujet a déja été abordé en forum, mais je n'y ai pas trouvé ma réponse.
J'ai un fichier dont certaines lignes ont été tronquées.
Chaque ligne non tronquée est identifiée comme se finissant par le signe ">"
Pour réconcilier les lignes, j'applique donc
sed 's/[^>]\n//g' monfichier
Mais là je m'aperçois que le retour chariot n'est pas vu.
Un simple
sed 's/\n//g' monfichier
ne fonctionne pas non plus.
Ou plutôt, il est interprété dans un seul sens :
En effet, si je fais
sed 's/t/\n/g' monfichier
sed remplace bien tous les "t" par un retour chariot.
Par contre
sed 's/\n/t/g' monfichier
sed ne remplace rien !
:-(
6 réponses
sed ' :loop # On définit une étiquette />$/! { # Si la ligne ne se termine pas par > N # On ajoute la ligne suivante dans l'espace de travail #+ Les lignes étant alors séparées par le caractère fin de ligne #++ représenté par "\n" s/\n// # On supprime alors ce caratère t loop # On teste si un remplacement a eu lieu. Si c'est le cas on #+ se branche à l'étiquette } ' tlep;-))
Bonjour,
sed fonctionne par lignes et traite une ligne à la fois, sauf si on lui demande de concaténer la ligne suivante (commande n). Vous avez besoin de quelque chose du genre :
sed '/[^>]$/n;s/\n//'
Nota : non testé
Manu
sed fonctionne par lignes et traite une ligne à la fois, sauf si on lui demande de concaténer la ligne suivante (commande n). Vous avez besoin de quelque chose du genre :
sed '/[^>]$/n;s/\n//'
Nota : non testé
Manu
Salut,
En fait c'est pas la commande "n" ( pour "next" qui elle n'ajoute pas la ligne suivante à la ligne présente, mais la remplace) qu'il faut utiliser, mais la commande "N" conjointement avec une boucle de test.
Essaie ça :
En fait c'est pas la commande "n" ( pour "next" qui elle n'ajoute pas la ligne suivante à la ligne présente, mais la remplace) qu'il faut utiliser, mais la commande "N" conjointement avec une boucle de test.
Essaie ça :
[tmpfs]$ cat tlep ligne1> ligne2 ligne3 ligne4> ligne5> ligne6 ligne7> ligne8 ligne9 ligne10> [tmpfs]$ sed ':loop; />$/! N;s/\n//; t loop' tlep ligne1> ligne2ligne3ligne4> ligne5> ligne6ligne7> ligne8ligne9ligne10> [tmpfs]$;-))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question