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 :

Sed : supprimer saut de page ^L


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 55
    Par défaut Sed : supprimer saut de page ^L
    Bonjour

    je suis sous centos 5.3 et j'utilise bash.

    Je voudrai supprimer la dernière ligne d'un fichier si cette dernière contient le
    caractère saut de page ^L

    j'ai tenté de regarder la piste sed mais je n'arrive pas à lui faire reconnaitre
    le saut de page :

    sed '/\^L/d' fichier ne fonctionne pas.

    Quelqu'un aurait il une idée ?

    Merci

  2. #2
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Par défaut
    Bonjour,

    Le saut de page ne correspond-il pas "\f" ???

    Essaie avec :
    Rédacteur et Modérateur rubriques Linux et Virtualisation
    Mes Articles
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux
    N'oubliez pas de consulter les FAQ virtualisation et les cours et tutoriels Virtualisation
    Man pages en français

  3. #3
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 55
    Par défaut
    Super ca fonctionne

    J'avai fais une fixation sur ^L

    Par contre j'arrive pas a voir ce qu'il faut faire pour supprimer la dernière ligne (uniquement) si elle correspond a ce motif.

    Ex :

    A
    B
    \f
    C
    D
    \f

    Je veux obtenir

    A
    B
    \f
    C
    D

    Merci d'avance

  4. #4
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Voici une ligne qui devrait fonctionner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{if (lastLine) print lastLine; lastLine=$0} END {if (lastLine != "\f") print}' fichier_entree > fichier_sortie

  5. #5
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 55
    Par défaut
    Merci, ca fonctionne parfaitement

    Par contre je comprend pas grand chose a awk, et vu les quelques tutos que j'ai
    regardé sur le net ... ca me promet quelques heures de lectures

  6. #6
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    C'est pas hyper compliqué puisque j'y arrive:
    pour chaque ligne de fichier_entree, awk exécutera ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (lastLine) print lastLine; lastLine=$0
    C'est-à-dire que si la variable lastLine existe, il faut l'imprimer. Puis on assigne la ligne courante ($0) à lastLine. Autrement dit, on imprime le fichier avec une ligne de retard: donc tout le fichier sauf la dernière ligne.

    Ensuite vient le traitement final, une fois que toutes les lignes sont travaillées. C'est la fonction de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    END {if (lastLine != "\f") print}
    Si la dernière ligne travaillée, donc la dernière ligne du fichier (celle qui n'est pas encore imprimée), n'est pas "\f", alors on l'imprime.

    Toutes les impressions, au lieu de les envoyer à l'écran, on les capture pour les envoyer dans fichier_sortie grâce à:
    Facile, non?

  7. #7
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 55
    Par défaut
    Je comprend mieux ce que cela fait du coup, merci

    bon par contre c'est sur j'aurai pas pu l'écrire :p

  8. #8
    LLB
    LLB est déconnecté
    Membre émérite
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par défaut
    Avec sed, il suffit d'ajouter $ pour sélectionner la dernière ligne :

  9. #9
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    LLB, c'est vraiment concis. Heu... pourquoi le ';' ?

  10. #10
    LLB
    LLB est déconnecté
    Membre émérite
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par défaut
    Parce que 'd' est une commande et que le caractère suivant n'est pas un argument de 'd'. Pour indiquer la fin d'une commande, il faut mettre un point-virgule ou un retour ligne.
    L'accolade après le dollar indique que le bloc ne s'applique que lorsque le sélecteur de ligne $ est activé, c'est-à-dire quand on est sur la dernière ligne.

  11. #11
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Je ne sais pas si le caractère ';', pour la syntaxe sed, est un élément terminateur ou séparateur. Si c'est un terminateur, alors il est nécessaire après chaque instruction; par contre, si c'est un séparateur, il n'existera pas après la dernière instruction. J'ai essayé sans ';' et ça marche aussi (j'ai sed version 4.1.5), ce qui semble vouloir dire que c'est un séparateur. Mais je n'en suis pas absolument certain.

  12. #12
    LLB
    LLB est déconnecté
    Membre émérite
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par défaut
    C'est un séparateur. Du coup, quand il y en a un, ça indique que la commande est terminée (mais ce n'est pas la peine d'en mettre un à la fin du code).

  13. #13
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 55
    Par défaut
    merci LLB, j'avai pas mal cherché avec sed sans trouver la solution.

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

Discussions similaires

  1. [ODS PDF]Supprimer sauts de page en gardant titres
    Par Filippo dans le forum ODS et reporting
    Réponses: 3
    Dernier message: 20/04/2017, 11h53
  2. Supprimer saut de page automatique
    Par lecteur1001 dans le forum Mise en forme
    Réponses: 12
    Dernier message: 23/10/2009, 12h58
  3. sed : supprimer saut de ligne
    Par michaeljeru dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 12/09/2008, 17h52
  4. Réponses: 2
    Dernier message: 18/04/2008, 22h41
  5. [VB6]supprimer un saut de page dans Word
    Par Yal17 dans le forum VB 6 et antérieur
    Réponses: 25
    Dernier message: 14/06/2006, 13h21

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