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

Linux Discussion :

Afficher à partir de la ligne... ?


Sujet :

Linux

  1. #1
    Membre actif
    Inscrit en
    Août 2005
    Messages
    698
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 698
    Points : 252
    Points
    252
    Par défaut Afficher à partir de la ligne... ?
    Bonjour,

    Je souhaite mettre dans un fichier les pkg installés sur ma débian.
    Mais uniquement ce qui est inscrit à partir du champ "NAME".

    Comment traduit on en shell "a partir de la ligne avec le mot Name" ?

    Merci bcp...

    Laurent

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    plusieurs solutions cela depend de la scruture du fichier en question

    regarde la commande grep il y a de forte chance que ce soit realisable avec.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 142
    Points : 127
    Points
    127
    Par défaut
    Pour afficher le numero de ligne en face de la ligne désirée, et afficher que la première occurence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -c "pattern" <file>|head -1
    Pour récupérer uniquement le numéro de ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -c "pattern" <file>|head -1|cut -f1 -d:
    Pour afficher le contenu de ton fichier à partir de cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tail +`grep -c "pattern" <file>|head -1|cut -f1 -d:` <file>
    Je te conseille de te créer un petit alias

  4. #4
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 282
    Points : 11 036
    Points
    11 036
    Par défaut
    Cela ne se fait pas avec sed ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '/regex/,$' fichier

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 142
    Points : 127
    Points
    127
    Par défaut
    Marche pas ta commande...
    Je suis sous Solaris elle renvoie une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Unrecognized command: /regex/,$

  6. #6
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 282
    Points : 11 036
    Points
    11 036
    Par défaut
    J'ai oublié le p(rint). Désolé.
    =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '/regex/,$p' fichier
    (Man -> sed -n '{adresse},{adresse}p(rint)')

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 142
    Points : 127
    Points
    127
    Par défaut
    En effet c'est mieux et plus simple que ma série de commandes !

  8. #8
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    On a aussi les solutions à base de awk, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat fichier | awk '/nom/ { sortir=1;} { if (sortir==1) print $0;}'
    Avec le gros avantage que l'on peut, de la même manière, arrêter la sortie à partir du moment où l'on rencontre un autre motif que "nom" ...

    Bonne continuation

  9. #9
    Membre actif
    Inscrit en
    Août 2005
    Messages
    698
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 698
    Points : 252
    Points
    252
    Par défaut
    2Eurocents merci.

    Par contre si j'ajoute "| head -10" je n'ai pas les 10 lignes qui suivent "nom". Mais tout ce qui suit.
    Ou est mon erreur ?

    Je n'ai pas compris le role de "{ sortir=1;} { if (sortir==1)", peux tu m'éclairer ?

    MERCI BCP...

  10. #10
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par lorenzo95
    2Eurocents merci.
    Il n'y a pas de quoi, la solution de Luc Hermitte est aussi tout à fait valable ... et plus courte s'il n'y a rien à ajouter.

    Citation Envoyé par lorenzo95
    Par contre si j'ajoute "| head -10" je n'ai pas les 10 lignes qui suivent "nom". Mais tout ce qui suit.
    Ou est mon erreur ?
    Etonnant ...

    Est-ce pareil avec un "| head -n 10" ?

    Citation Envoyé par lorenzo95
    Je n'ai pas compris le role de "{ sortir=1;} { if (sortir==1)", peux tu m'éclairer ?
    En fait, j'ai programmé une machine à états 8)

    Par défaut, on est dans l'état avec sortir=0 (valeur implicite)

    Avec ceci "/nom/ { sortir=1;}", on passe en état sortir=1 si l'on rencontre /nom/.

    Ce bloc "{ if (sortir==1) print $0;}" est exécuté pour toutes les lignes, puisqu'il n'est pas précédé d'une expression rationnelle. Cependant, vu le test sur l'état de sortir, il ne fait rien tant qu'on a pas rencontré ce qui change l'état de sortir pour le mettre à 1. Après, il sort les lignes en totalité.

    Est-ce plus clair ?

    Bonne continuation.

  11. #11
    Membre actif
    Inscrit en
    Août 2005
    Messages
    698
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 698
    Points : 252
    Points
    252
    Par défaut
    - Exact j'avais oublié le "n" pour head, ça marche bcp mieux.

    - Pour les explications, impeccable..

    1000 Mercis...

  12. #12
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par lorenzo95
    - Exact j'avais oublié le "n" pour head, ça marche bcp mieux.
    Pour info, "head -10" est une tolérance de certaines versions GNU de head.

    La norme (le standard), c'est "head -n 10". Cette dernière structure, bien que plus lourde, est à privilégier dans un but de portabilité. Ceux qui opèrent sur solaris ou AIX s'en rendent assez vite compte, par exemple.

    Bonne continuation.

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 142
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par 2Eurocents
    La norme (le standard), c'est "head -n 10". Cette dernière structure, bien que plus lourde, est à privilégier dans un but de portabilité. Ceux qui opèrent sur solaris ou AIX s'en rendent assez vite compte, par exemple.
    Jamais eu de problème avec la commande head sans -n sous AIX ou Solaris...

  14. #14
    Membre actif
    Inscrit en
    Août 2005
    Messages
    698
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 698
    Points : 252
    Points
    252
    Par défaut
    Oups je viens de vérifier, j'avais commis une erreur dans le reste de ma syntaxe, ça fonctionne bien !

  15. #15
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 282
    Points : 11 036
    Points
    11 036
    Par défaut
    Citation Envoyé par 2Eurocents
    Il n'y a pas de quoi, la solution de Luc Hermitte est aussi tout à fait valable ... et plus courte s'il n'y a rien à ajouter.
    Petites notes par rapport à sed:
    - on peut très facilement indiquer l'adresse d'arrêt, que cela soit une regex, un delta, un numéro de ligne, ...
    - on peut faire pas mal d'autres trucs assez poussés, cependant la syntaxe devient rapidement complexe je trouve.

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

Discussions similaires

  1. [AC-2007] Afficher, dans le planning, des lignes à partir d'aujourd'hui
    Par Chøry dans le forum Access
    Réponses: 2
    Dernier message: 10/04/2015, 08h18
  2. [Exceptions] Comment afficher le numéro de la ligne ?
    Par hpalpha dans le forum Langage
    Réponses: 2
    Dernier message: 09/12/2004, 09h58
  3. lancer une mdb a partir d'une ligne de commande
    Par dpie dans le forum Access
    Réponses: 5
    Dernier message: 30/11/2004, 15h01
  4. Effacer le contenu d'un fichier a partir d'une ligne
    Par localhost dans le forum Linux
    Réponses: 3
    Dernier message: 04/04/2004, 04h47
  5. Réponses: 18
    Dernier message: 08/02/2004, 22h38

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