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
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
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.
Pour afficher le numero de ligne en face de la ligne désirée, et afficher que la première occurence
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
Pour afficher le contenu de ton fichier à partir de cette ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part grep -c "pattern" <file>|head -1|cut -f1 -d:
Je te conseille de te créer un petit alias
Code : Sélectionner tout - Visualiser dans une fenêtre à part tail +`grep -c "pattern" <file>|head -1|cut -f1 -d:` <file>![]()
Cela ne se fait pas avec sed ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part sed -n '/regex/,$' fichier
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
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/,$
J'ai oublié le p(rint). Désolé.
=>(Man -> sed -n '{adresse},{adresse}p(rint)')
Code : Sélectionner tout - Visualiser dans une fenêtre à part sed -n '/regex/,$p' fichier
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
En effet c'est mieux et plus simple que ma série de commandes !![]()
On a aussi les solutions à base de awk, par exemple :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" ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part cat fichier | awk '/nom/ { sortir=1;} { if (sortir==1) print $0;}'
Bonne continuation
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...
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.Envoyé par lorenzo95
Etonnant ...Envoyé par lorenzo95
Est-ce pareil avec un "| head -n 10" ?
En fait, j'ai programmé une machine à états 8)Envoyé par lorenzo95
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.
- Exact j'avais oublié le "n" pour head, ça marche bcp mieux.
- Pour les explications, impeccable..
1000 Mercis...
Pour info, "head -10" est une tolérance de certaines versions GNU de head.Envoyé par lorenzo95
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.
Jamais eu de problème avec la commande head sans -n sous AIX ou Solaris...Envoyé par 2Eurocents
Oups je viens de vérifier, j'avais commis une erreur dans le reste de ma syntaxe, ça fonctionne bien !
Petites notes par rapport à sed:Envoyé par 2Eurocents
- 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.
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
Partager