IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Remplacer les CR d'un fichier sans toucher aux crLF de fin de ligne


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut Remplacer les CR d'un fichier sans toucher aux crLF de fin de ligne
    Bonjour,
    J'ai un fichier dont les caractères de fin de ligne est un CRLF. Sur certaines ligne j'ai un CR en plein milieu. Il me faudrait remplacer les CR de milieu de ligne par des blancs, sans toucher au CR de fin de ligne.
    J'ai bien réussi à transformer les CR par des blancs avec tr. Mais il faudrait que je transforme après les blancLF par des CRLF.
    Voilà ce que j'ai fait.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat ${FICHIER}|tr '\r' ' ' >${FICHIER}.1
    Merci de votre aide.
    Soazig

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juillet 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2014
    Messages : 84
    Par défaut
    vite fait, je dirais qu'il faut supprimer tous les \r
    (pseudo code)
    puis remplacer les \n par \r\n
    (pseudo code)
    à tester sur une copie du fichier bien sur.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut
    Bonjour,
    Il ne faut pas supprimer les \r (CR), il faut les remplacer par un espace. Car c'est un fichier qui sera mangé par du cobol. Et une fois la substitution effectué, il faut remplacer le blanc suivi d'un \n (LF) par un LF.
    Mais ça je ne sais pas le faire.

    Merci néanmoins
    Soazig

  4. #4
    Membre éprouvé
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juillet 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2014
    Messages : 84
    Par défaut
    ça revient au même

    tu remplaces tout les CR par un espace

    sed -e"/\r/ /"

    puis tous les espaces suivi d'un LF par un CRLF

    sed -e"/ \n/\r\n/"

    Le problème dans mon code est la prise en compte de l'espace dans la regex.

  5. #5
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    Bonjour,

    Je ne mets pas de pouce baissé pour ces conseils, mais le coeur y est: Il y a au moins 2 fautes. Tu n'as sûrement pas testé.
    1. Il manque le 's' qui signifie substitution et qui indique l'opération à effectuer.
    2. L'outil sed prend les lignes une à une. Il n'y aura donc jamais de \n au milieu de la ligne, à moins que tu aies manipulé pour en avoir.


    La question qu'il faut plutôt poser est "D'où viennent ces fichiers?"
    On dirait des fichiers venant de Windows qui n'ont pas été nettoyés avant d'être traités. Faudrait commencer par là.

    NB: le CRLF ne sert à rien dans un fichier Unix. Seul \n a un intérêt.

    Sinon, pour répondre comme une brute à la question initiale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/\r/ /g;s/ $/\r/' monfichier.txt
    Et pour répondre à la deuxième question (différente de celle initiale... ce serait trop simple):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/\r/ /g;s/ $//' monfichier.txt

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut
    Rebonjour,
    Le fichier est téléchargé sur le site ameli de la sécurité sociale, et oui on est d'accord il est foireux. Le but est de le remettre d'aplomb.
    Je vous rassure il m'a fallu 3heures pour trouver que c'est le fichier qui était foireux et pas le programme qui l'exploitait.

    J'ai essayé ce qu'a proposé Flodelarab à savoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/\r/ /g;s/ $//' $FICHIER>$FICHIER_OUT
    et le seul effet est que mon fichier faisait 129 caractères et qu'il en fait 128 maintenant ce qui n'est pas ce qui est souhaité.

    On m'a aussi proposé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    cat file | while read line
    do
    echo $line | sed -e "s/ctrl-vctrl-m\(.*\)$/\1/" | read NewLine
    echo $NewLine
    done > NewFile
    où ctrl-vctrl-m doivent être tapé sous vi mais cela ne fonctionne pas non plus, le shell ne se termine pas. De toute façon je ne peux pas avoir de shell contenant des CR car ils seraient supprimés par des moulinettes externes.
    J'avoue ne pas avoir été présentée à sed.

    Je ne voie pas en quoi ce que j'ai écrit sur le deuxième post est en contradiction avec ce que j'ai écrit sur le deuxième.
    Remarque le shell sera utilisé sous l'émulateur MKS ou sous cygwin
    Merci
    Soazig

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CTP4]Modifier le modele sans toucher aux données
    Par john85 dans le forum ASP.NET MVC
    Réponses: 4
    Dernier message: 12/07/2011, 09h45
  2. Réponses: 2
    Dernier message: 20/03/2008, 09h38
  3. Réponses: 24
    Dernier message: 25/09/2007, 11h53
  4. Dimension titres de chapitre sans toucher aux autres polices
    Par profilien dans le forum Mise en forme
    Réponses: 1
    Dernier message: 24/08/2007, 17h34
  5. remplacer les String dans un fichier
    Par makohsarah dans le forum Langage
    Réponses: 3
    Dernier message: 29/05/2006, 13h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo