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

Contribuez Discussion :

[FAQ] Propositions pour la FAQ Linux sur sed


Sujet :

Contribuez

  1. #21
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 2 695
    Points : 7 880
    Points
    7 880
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Sauf que dans le concret, on voit encore des internautes débarquer avec des fichiers textes ayant des lignes finies par "\r".
    Oui, c'est vrai. Les applications sur Mac OS sont souvent plus tolérantes sur ce qu'elles lisent, puisqu'il a bien fallu assurer la transition entre les deux conventions de façon pas trop brutale, et continuent malheureusement parfois à sauvegarder avec l'ancienne convention.

    Je propose donc de faire une indication mixte pour Mac OS
    Ok, on pourrais mettre:

    Windows a des fins de ligne en CRLF (carriage return, line feed), \r\n, 0d0a
    Unix, Linux et Mac OS (depuis 2001) ont des fins de ligne en LF, \n, 0a (standard POSIX)
    Les anciennes versions de Mac OS (jusqu'à Mac OS 9, 1999) utilisaient CR, \r, 0d, et l'on rencontre parfois des fichiers utilisant encore cette convention.

    La différence viendrait-elle de la différence entre Mac OS et Mac OSX ?
    Oui, c'est bien ça. C'était impliqué par "vu l'utilisation d'une couche BSD et la certification POSIX" qui sont associés à l'arrivée de Mac OS X.
    ɹǝsn *sıɹɐlos*

  2. #22
    Responsable Systèmes


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    14 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 14 353
    Points : 33 008
    Points
    33 008
    Par défaut
    Comment supprimer des lignes précises à condition qu'elles contiennent un motif ?
    Il y a déjà cette entrée :
    Comment supprimer des lignes selon un motif
    On pourrait la compléter.

    Comment afficher des lignes spécifiques d'un fichier ?
    sed est un logiciel de manipulation de fichier, là il n'y en a pas.
    Comment ne pas traiter tout le fichier ?
    Il y a cette entrée : Comment supprimer des lignes précises

    Il me faut les commandes pour :
    supprimer tous les retours chariot (\n, \r, \n\r)
    harmoniser les retours chariots en \n
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #23
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 2 695
    Points : 7 880
    Points
    7 880
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    sed est un logiciel de manipulation de fichier, là il n'y en a pas.
    Oui, c'est sûr il vaut mieux mettre un nom de fichier dans une commande qui s'intitule: "Comment afficher des lignes spécifiques d'un fichier ?"

    Une remarque quand même, sed ne traite pas forcément des fichiers. Comme son nom l'indique, c'est un "stream editor", un éditeur de flux.
    C'est un utilitaire typique Unix/Linux qui lit sur l'entrée standard, écrit sur la sortie standard, très adapté donc pour être utilisé avec des redirections ou pipes.
    ɹǝsn *sıɹɐlos*

  4. #24
    Rédacteur


    Homme Profil pro
    Instituteur retraité
    Inscrit en
    novembre 2015
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Instituteur retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2015
    Messages : 825
    Points : 3 932
    Points
    3 932
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Comment supprimer des lignes précises à condition qu'elles contiennent un motif ?
    Il y a déjà cette entrée :
    Comment supprimer des lignes selon un motif
    On pourrait la compléter.
    En fait ça correspondait à une entrée qui existait, sur laquelle Flodelarab a signalé une erreur. Elle a été supprimée, et je ne sais plus quel intitulé exact elle avait. On peut rétablir avec le correctif indiqué par disedorgue.

    On peut soit maintenir deux entrées, soit faire de "Comment supprimer des lignes précises à condition qu'elles contiennent un motif ?" une seconde partie de "Comment-supprimer-des-lignes-selon-un-motif" avec l'introduction suivante:

    Il est possible de n'agir que sur certaines lignes :
    Efface la ligne 7 si elle commence par #
    Efface les lignes qui commencent par # depuis la ligne 4 jusqu'à la ligne 7
    Je n'ai pas d'avis déterminé quant à celle des deux solutions qui aurait la meilleure visibilité.

    Comment afficher des lignes spécifiques d'un fichier ?
    sed est un logiciel de manipulation de fichier, là il n'y en a pas.
    Comment afficher des lignes spécifiques d'un fichier ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '3p;5p' /chemin/mon-fichier
    Plus on apprend, plus on découvre que ce que l'on sait est insignifiant face à tout ce que l'on ne sait pas.
    Retrouvez la liste de mes articles et tutoriels sur la sauvegarde-restauration, les distributions éducatives, le système Linux et le Raspberry pi en cliquant sur ce lien.

  5. #25
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    4 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : septembre 2005
    Messages : 4 707
    Points : 11 807
    Points
    11 807
    Par défaut
    Ne pourrait-on pas souligner l'idée que les accolades permettent de faire un "ET" logique entre 2 conditions ?
    Pour le "OU", il suffit de couper en 2 instructions indépendantes. Pour le "ET", je ne connais pas d'autre technique que l'accolade.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  6. #26
    Rédacteur


    Homme Profil pro
    Instituteur retraité
    Inscrit en
    novembre 2015
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Instituteur retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2015
    Messages : 825
    Points : 3 932
    Points
    3 932
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Ne pourrait-on pas souligner l'idée que les accolades permettent de faire un "ET" logique entre 2 conditions ?
    Pour le "OU", il suffit de couper en 2 instructions indépendantes. Pour le "ET", je ne connais pas d'autre technique que l'accolade.
    Bonne idée.
    Peux-tu nous faire une formulation concrète, en indiquant éventuellement les contextes dans lesquels ça fonctionne et ceux dans lesquels ça ne fonctionnerait pas ?
    Plus on apprend, plus on découvre que ce que l'on sait est insignifiant face à tout ce que l'on ne sait pas.
    Retrouvez la liste de mes articles et tutoriels sur la sauvegarde-restauration, les distributions éducatives, le système Linux et le Raspberry pi en cliquant sur ce lien.

  7. #27
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    décembre 2012
    Messages
    3 825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : décembre 2012
    Messages : 3 825
    Points : 11 176
    Points
    11 176
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Ne pourrait-on pas souligner l'idée que les accolades permettent de faire un "ET" logique entre 2 conditions ?
    Pour le "OU", il suffit de couper en 2 instructions indépendantes. Pour le "ET", je ne connais pas d'autre technique que l'accolade.
    La répétition de la condition...

    Cordialement.

  8. #28
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    4 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : septembre 2005
    Messages : 4 707
    Points : 11 807
    Points
    11 807
    Par défaut
    Citation Envoyé par Philippe Dpt35 Voir le message
    Bonne idée.
    Peux-tu nous faire une formulation concrète, en indiquant éventuellement les contextes dans lesquels ça fonctionne et ceux dans lesquels ça ne fonctionnerait pas ?
    Comment combiner plusieurs conditions ?
    • AVEC UN "OU"
      Il suffit de prendre les 2 alternatives comme indépendantes.
      Exemple:
      Si la ligne est un commentaire ou si c'est la dernière, effacer la ligne.
    • AVEC UN "ET"
      L'astuce consiste à utiliser l'accolade (regroupement de commandes)
      Exemple:
      Si la ligne est la première et si elle commence par un shebang, alors afficher le nom complet de l'interpréteur.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      sed -n '1{/^#!/s///p;q}'
      Note: inutile de répéter le motif trouvé dans la première partie de la substitution.

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      $ find ~ -type f -exec file {} \; 2>/dev/null |sed '/text/!d; s@:.*@@'|xargs -ITT sed -n '1{/^#!/s///p;q}' TT | sort | uniq -c
            6 /bin/bash
            2 /bin/sed -nf
            1 /bin/sh
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  9. #29
    Responsable Systèmes


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    14 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 14 353
    Points : 33 008
    Points
    33 008
    Par défaut
    En fait ça correspondait à une entrée qui existait, sur laquelle Flodelarab a signalé une erreur. Elle a été supprimée, et je ne sais plus quel intitulé exact elle avait. On peut rétablir avec le correctif indiqué par disedorgue.
    Elle n'est pas supprimée, juste invalidée.

    J'attend la fin du débat pour faire une seule mise à jour.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

  10. #30
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    décembre 2012
    Messages
    3 825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : décembre 2012
    Messages : 3 825
    Points : 11 176
    Points
    11 176
    Par défaut
    2 suggestions via gnu sed:

    1. Prendre en compte aussi les accents sur les lettres
      Par exemple remplacer la chaine 'éeêè' par 'eeee' :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      echo 'éeêè' | sed 's/[[=e=]]/e/g'
      Bien sur, ici, on dépend de la locale: ne fonctionne pas depuis la locale C puisqu'elle ne comprend pas les accents.
    2. Cas particulier pour traiter un fichier texte dans sa globalité et non ligne à ligne (qui contredit l'avertissement dans la faq)
      Gnu sed expose une option qui lui dit de considérer que le séparateur de ligne n'est plus '\n' mais '\0' (caractère NULL)
      Afficher la ligne 1 sans l'option:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      echo -e "toto\ntiti\ntutu" | sed -n '1p' 
      toto
      Afficher la ligne 1 avec l'option:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      $ echo -e "toto\ntiti\ntutu" | sed -zn '1p' 
      toto
      titi
      tutu
    Cordialement.

  11. #31
    Rédacteur


    Homme Profil pro
    Instituteur retraité
    Inscrit en
    novembre 2015
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Instituteur retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2015
    Messages : 825
    Points : 3 932
    Points
    3 932
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    2 suggestions via gnu sed:
    [*]Cas particulier pour traiter un fichier texte dans sa globalité et non ligne à ligne (qui contredit l'avertissement dans la faq)
    On pourrait dès lors compléter cet avertissement par ceci:

    Formulation actuelle:
    Ne pas oublier que sed fonctionne ligne par ligne. Si vous travaillez depuis une variable, contenant des retours chariot, avec un pipe vers sed, le contenu ne sera pas examiné en bloc !

    Modification proposée:
    Ne pas oublier que sed fonctionne ligne par ligne. Si vous travaillez depuis une variable, contenant des retours chariot, avec un pipe vers sed, le contenu ne sera pas examiné en bloc !
    Cette restriction peut toutefois être contournée par l'option -z. Avec cette option, sed considère que le séparateur de ligne n'est plus '\n' mais '\0' (caractère NULL).
    Plus on apprend, plus on découvre que ce que l'on sait est insignifiant face à tout ce que l'on ne sait pas.
    Retrouvez la liste de mes articles et tutoriels sur la sauvegarde-restauration, les distributions éducatives, le système Linux et le Raspberry pi en cliquant sur ce lien.

  12. #32
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    décembre 2012
    Messages
    3 825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : décembre 2012
    Messages : 3 825
    Points : 11 176
    Points
    11 176
    Par défaut
    Oui, après, faut-il préciser que c'est spécifique à gnu sed, ou on considère que c'est implicite étant donné que l'on est dans le monde linux et autre commande gnu ?
    Cordialement.

  13. #33
    Rédacteur


    Homme Profil pro
    Instituteur retraité
    Inscrit en
    novembre 2015
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Instituteur retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2015
    Messages : 825
    Points : 3 932
    Points
    3 932
    Billets dans le blog
    1
    Par défaut
    La FAQ sed est dans la FAQ Linux, donc c'est inutile de préciser.
    Plus on apprend, plus on découvre que ce que l'on sait est insignifiant face à tout ce que l'on ne sait pas.
    Retrouvez la liste de mes articles et tutoriels sur la sauvegarde-restauration, les distributions éducatives, le système Linux et le Raspberry pi en cliquant sur ce lien.

  14. #34
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    4 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : septembre 2005
    Messages : 4 707
    Points : 11 807
    Points
    11 807
    Par défaut
    Cette réflexion me fait penser que l'on a souvent conseillé :z;N;$!b z, alors que, peut-être, ajouter cette option -z aurait suffit.


    Je prends quelques exemples au hasard.

    Exemple 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed ':z;N;$! bz;s/\n\([a-zA-Z0-9;]\)/ \1/g'
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -z 's/\n\([a-zA-Z0-9;]\)/ \1/g'
    Exemple 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ sed ':z;N;$!b z;s/par/pour/' /tmp/test3.txt
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ sed -z 's/par/pour/' /tmp/test3.txt
    C'est quand même plus simple et lisible.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/11/2016, 15h44
  2. Vos propositions pour la FAQ Word
    Par Heureux-oli dans le forum Contribuez
    Réponses: 1
    Dernier message: 26/05/2009, 15h46
  3. comment faire une proposition pour la faq
    Par ddrmax dans le forum C++Builder
    Réponses: 3
    Dernier message: 31/07/2008, 09h05

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