Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

#1 Le 01/06/2011, à 18:48

pem1664

[Résolu]question sur grep... :/

Hello a tous, j'ai une question bete : je cherche a ne récuperer que la température de ma CG (nvidia)
donc :

pem@Bureau:~$ nvidia-settings -q GPUCoreTemp | grep [[:digit:]] --exclude=[0.0]
  Attribute 'GPUCoreTemp' (Bureau:0.0): 51.

mais ca ne marche pas.. hmm j'ai bien lu le man mais bon...
edit : ah, ca marche pas de changer la couleur dans du code.. tongue

Dernière modification par pem1664 (Le 01/06/2011, à 19:46)


Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)

Hors ligne

#2 Le 01/06/2011, à 18:51

helly

Re : [Résolu]question sur grep... :/

Bonjour.
Déjà, post le résultat entier de la commande sans pipe, on verra comment filtrer ensuite smile.


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#3 Le 01/06/2011, à 18:55

pem1664

Re : [Résolu]question sur grep... :/

hello helly, merci smile
bah voila :

pem@Bureau:~$ nvidia-settings -q GPUCoreTemp

  Attribute 'GPUCoreTemp' (Bureau:0.0): 49.
    'GPUCoreTemp' is an integer attribute.
    'GPUCoreTemp' is a read-only attribute.
    'GPUCoreTemp' can use the following target types: X Screen, GPU.

Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)

Hors ligne

#4 Le 01/06/2011, à 18:58

pem1664

Re : [Résolu]question sur grep... :/

J'ai essayé plein de trucs mais a chaque fois ca me garde le 0.0 (sans le point) je crois que --exclude doit pas etre la solution parceque dans le man ils disent que c'est pour les fichiers et repertoires..


Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)

Hors ligne

#5 Le 01/06/2011, à 19:02

helly

Re : [Résolu]question sur grep... :/

Bon, hé bien tu l’as la réponse là, je pensais que ça allait baver 4200 lignes donc qu’il fallait greper, mais là non, pas la peine.
Mais si tu veux récupérer juste la valeur pour un script, je te bricole un truc :

nvidia-settings -q GPUCoreTemp | grep "Bureau" | cut -d ":" -f3| cut -d "." -f1

↑ bricolage hein…


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#6 Le 01/06/2011, à 19:03

FRUiT

Re : [Résolu]question sur grep... :/

Déjà, grep sans option cherche naturellement des lignes dans l'output de la commande le précédant.

Exemple :

> echo "foo bar" | grep "bar"
foo bar

Pour n'avoir comme résultat que le masque/motif recherché il faut utiliser l'option -o

> echo "foo bar" | grep -o "bar"
bar

Ensuite tu lui fait chercher [[:digit:]] ce qui va rechercher un chiffre seulement

> echo "Temp=78°C" | grep -o "[[:digit:]]"
7
8

Pour matcher plusieurs chiffres il faut utiliser une REGEX avec le caractère spécial +

[[:digit:]]+

Et pour que grep comprenne que tu lui indique bien une REGEX comme motif, il faut le lui préciser avec l'option -E

> echo "Temp=78°C" | grep -Eo "[[:digit:]]+"
78

En REGEX le caractère « point » est spécial, il signife explicitement "n'importe quel caractère", donc si tu veux rechercher le caractère « point » il faut l'échapper. Et de plus si ton nombre a un point au milieu il faut le préciser dans le motif de recherche

> echo "Temp=78.8°C" | grep -Eo "[[:digit:]\.]+"
78.8

Dernière modification par FRUiT (Le 01/06/2011, à 19:13)


Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#7 Le 01/06/2011, à 19:10

FRUiT

Re : [Résolu]question sur grep... :/

> nvidia-settings -q GPUCoreTemp | awk 'BEGIN { FS="[ .]" } /Bureau/ { print $(NF-1) }'
49

Dernière modification par FRUiT (Le 01/06/2011, à 19:11)


Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#8 Le 01/06/2011, à 19:28

pem1664

Re : [Résolu]question sur grep... :/

Whoaw! Merci a vous 2 smile
@helly : alors si je comprend bien (ca m'a permis de découvrir le man de cut tongue )

cut -d ":" -f3 

permet de délimiter au ":" donc tout ce qui est avant les ":" c'est  le champ 1 apres les 2 pts c'est le champ 2 et apres l'espace c'est le champ 3 (l'espace sert de séparateur de champ)
d'ou le

cut -d "." -f1

qui lui garde le cham 1 avant le "."
j'ai essayé avec :

pem@Bureau:~$ nvidia-settings -q GPUCoreTemp | grep [[:digit:]] | cut -d ":" -f3| cut -d "." -f1
 50

et donc la il commence la découpe des champs a partir du premier chiffre rencontré, je crois.
@FRUiT  : je croyais avoir compris le coup du + vu que ca marchait avec ton ex mais avec ma commande il m'affiche tjs le 0.0 en rouge? et si je rajoute des chiffres séparé par une virgule dans ton ex, ca marche plus, donc j'ai pas compris hmm

pem@Bureau:~$ echo "Temp=78°C" | grep -o "[[:digit:]]"
7
8
pem@Bureau:~$ echo "Temp=78°C" | grep -o "[[:digit:]]+"
pem@Bureau:~$ echo "Temp=78°C" | grep -E "[[:digit:]]+"
Temp=78°C
pem@Bureau:~$ nvidia-settings -q GPUCoreTemp | grep -E "[[:digit:]]+"
  Attribute 'GPUCoreTemp' (Bureau:0.0): 48.
pem@Bureau:~$  echo "Temp=78°C,0,0" | grep -E "[[:digit:]]+"
Temp=78°C,0,0

En tout cas merci à vous 2!


Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)

Hors ligne

#9 Le 01/06/2011, à 19:28

helly

Re : [Résolu]question sur grep... :/

Merci pour le p’tit cours smile.


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#10 Le 01/06/2011, à 19:29

pem1664

Re : [Résolu]question sur grep... :/

Ah jvais pouvoir voir le man de awk... smile


Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)

Hors ligne

#11 Le 01/06/2011, à 19:46

pem1664

Re : [Résolu]question sur grep... :/

@ FRUiT : merci pour la syntaxe, je crois que je l'ai compris :

pem@Bureau:~$ nvidia-settings -q GPUCoreTemp | awk 'BEGIN { FS="[ .]" } /Bureau/ { print $(NF-1) }'
48

ca donne que tu définis le séparateur de champ a "." et que tu n'affiches que le 4eme champ, mais c'est quoi le /Bureau/ la? J'ai essayé de le changer et ca marche avec /A/


Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)

Hors ligne

#12 Le 01/06/2011, à 19:47

pem1664

Re : [Résolu]question sur grep... :/

Merci a vous 2 en tt cas smile


Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)

Hors ligne

#13 Le 01/06/2011, à 19:47

FRUiT

Re : [Résolu]question sur grep... :/

pem1664 a écrit :

@FRUiT  : je croyais avoir compris le coup du + vu que ca marchait avec ton ex mais avec ma commande il m'affiche tjs le 0.0 en rouge? et si je rajoute des chiffres séparé par une virgule dans ton ex, ca marche plus, donc j'ai pas compris hmm

pem@Bureau:~$ echo "Temp=78°C" | grep -o "[[:digit:]]"
7
8
pem@Bureau:~$ echo "Temp=78°C" | grep -o "[[:digit:]]+"
pem@Bureau:~$ echo "Temp=78°C" | grep -E "[[:digit:]]+"
Temp=78°C
pem@Bureau:~$ nvidia-settings -q GPUCoreTemp | grep -E "[[:digit:]]+"
  Attribute 'GPUCoreTemp' (Bureau:0.0): 48.
pem@Bureau:~$  echo "Temp=78°C,0,0" | grep -E "[[:digit:]]+"
Temp=78°C,0,0

Ben donc il faut cumuler les deux options de grep (-Eo), relis attentivement mes exemples...
Cela dit comme tu as plusieurs séries de chiffres avec des points dans la même ligne, grep ne s'en sortira pas élégamment, car c'est plutôt un outil de recherche orienté lignes uniquement.

A l'inverse, cut est un outil orienté champs. Il découpe selon des délimiteurs précis.

La commande de helly marche, certes, mais elle ouvre trois sous-shells supplémentaires (y'a trois pipes) et fait appel à deux commandes externes.

Awk lui est quasiment un language de programmation, il peut cumuler le travail de grep et cut, et avec un seul pipe.

awk '

Commencer un travail avec awk.


BEGIN

Avant de commencer le traitement,


{ FS="[ .]" }

Choisir comme séparateur (Field Separator) soit le point soit l'espace [ .],


/Bureau/

Ne matcher que la ligne contenant le mot « Bureau »,


{ print $(NF-1) }

Pour chaque ligne trouvée (ici une seule), imprimer la valeur de l'avant dernier champ (NF-1).


'

Fin du travail.

Pour awk, le dernier champ se trouve obligatoirement après le dernier séparateur. Comme le point a été choisi comme séparateur, le dernier champ se trouve après le dernier point (ici ce champ est vide puisque le dernier point termine la ligne). Comme l'espace a aussi été choisi comme séparateur, l'avant dernier champ est donc se qui se trouve entre le dernier point et le dernier espace (49, donc, mais ça aurait pu être 49.050 tout comme 49,050 ou même abcd ).

Dernière modification par FRUiT (Le 01/06/2011, à 19:55)


Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#14 Le 01/06/2011, à 20:39

pem1664

Re : [Résolu]question sur grep... :/

Ok, j'ai compris! Merci FRUiT pour tes explications! J'avais cru comprendre en lisant le man de awk, que c'etait un outil tres complet, en effet, j'avais pas compris le /Bureau/ mais maintenant, oui smile
Bon bah impec, avec ca je devrais pouvoir arriver a faire mon script smile
Merci pour tout!
PS c'est fou ce qu'on peux faire avec du shell, l'embetant c'est qu'il y a tellement de commande et de type que c'est compliqué de s'y retrouver quand on débute.. Enfin... petit à petit...


Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)

Hors ligne

#15 Le 01/06/2011, à 20:42

pem1664

Re : [Résolu]question sur grep... :/

ah! j'avais pas percuté non plus que c'etait soit le point soit l'espace!

{ FS="[ .]" }

, j'avais pris ca juste pour un point (pas vu l'espace)
et je crois que j'ai bien compris les exemples que tu a donné pour les options du grep smile


Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)

Hors ligne

#16 Le 01/06/2011, à 20:53

FRUiT

Re : [Résolu]question sur grep... :/

De rian.

Le problème du shell comparativement à des languages de programmation (enfin selon moi) c'est qu'on peut écrire mille et une commandes pour exécuter une seule et même action.

Et je te conseille de distinguer dès le début les commandes internes (builtins) et externes (genre awk, grep, sed, seq, etc... le but étant d'utiliser ceux là le moins possible).

Dernière modification par FRUiT (Le 01/06/2011, à 20:55)


Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#17 Le 02/06/2011, à 15:13

FRUiT

Re : [Résolu]question sur grep... :/

pem1664 a écrit :

@ FRUiT : merci pour la syntaxe, je crois que je l'ai compris :

pem@Bureau:~$ nvidia-settings -q GPUCoreTemp | awk 'BEGIN { FS="[ .]" } /Bureau/ { print $(NF-1) }'
48

ca donne que tu définis le séparateur de champ a "." et que tu n'affiches que le 4eme champ, mais c'est quoi le /Bureau/ la? J'ai essayé de le changer et ca marche avec /A/

J'avais pas vu ce message.

Avec /A/ tu as matché la seule ligne contenant un A majuscule, c'est à dire celle avec le mot « Attribute », soit la même ligne que celle contenant « Bureau ». Pur hasard, donc.


Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#18 Le 02/06/2011, à 16:12

pem1664

Re : [Résolu]question sur grep... :/

FRUiT a écrit :

J'avais pas vu ce message.

C'est pas gravec FRUiT, avec l'explication précédente, j'avais bien compris, merci en tout cas pour ta patience et tes explications super claires.

FRUiT a écrit :

Et je te conseille de distinguer dès le début les commandes internes (builtins) et externes (genre awk, grep, sed, seq, etc... le but étant d'utiliser ceux là le moins possible).

Moi non plus j'avais pas vu ta mise a jour! Mais les commandes builtin dont tu parles ce sont les commandes de base, genre cd mv ls vi etc.. non? Apres y'a les commandes externe dont tu parles qui sont un peu plus evolués.  Apres, a un niveau superieur encore, chaque application fait appel a ses commandes propres qui peuvent etre utilisé en shell donc dans un script, comme par ex pour graver un cd ou faire une copie conforme d'un disque (cdrecord, dd etc..)


Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)

Hors ligne

#19 Le 02/06/2011, à 16:26

FRUiT

Re : [Résolu]question sur grep... :/

pem1664 a écrit :

cd mv ls vi etc.. non?

Et non ^^

cd est bien un builtin.
Tout le reste ce sont des commandes externes. Il y a aussi cp, rm, sed, awk, seq, et bien d'autres.

En gros une commande externe est un programme sur ton disque (principalement dans /bin et /usr/bin) tu peux regarder ce que contiennent ces deux dossiers pour te faire une idée.

Un builtin est une fonction intégrée dans bash (ou dans sh) il n'y donc pas de programme spécifique sur ton disque, c'est contenu dans le programme exécutable de ton shell. On peut citer par exemple for, while, echo, eval, set, case, if, printf. (Le programme echo étant une exception, il y a un builtin echo dans ton shell ET un programme externe /bin/echo. Dans un script tu peux utiliser l'un ou l'autre en mettant le chemin complet vers le programme, ou juste "echo")

Il n'y a pas de commandes externes plus évoluées que d'autres, chacun répondant à un besoin en particulier.

Dernière modification par FRUiT (Le 02/06/2011, à 16:26)


Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#20 Le 02/06/2011, à 16:52

pem1664

Re : [Résolu]question sur grep... :/

Ah ok, et donc suivant le shell que t'utilise, y'a plus ou moins de commandes builtin?]Donc le pipe, c'est du builtin par ex
EDIT:

pem1664 a écrit :

Donc le pipe, c'est du builtin par ex

Ah non un man bash m'apprend que c'est un metacaractere..
Et je crois que le man bash m'apprend toutes les commandes builtin.. roll

Dernière modification par pem1664 (Le 02/06/2011, à 16:57)


Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)

Hors ligne

#21 Le 02/06/2011, à 16:59

FRUiT

Re : [Résolu]question sur grep... :/

pem1664 a écrit :

Ah ok, et donc suivant le shell que t'utilise, y'a plus ou moins de commandes builtin?

Oui.

pem1664 a écrit :

Donc le pipe, c'est du builtin par ex

Je pense que oui (pas sur) mais il faut savoir que le pipe ouvre un nouveau sous-shell pour exécuter la commande à sa droite.


Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#22 Le 02/06/2011, à 17:16

Watael

Re : [Résolu]question sur grep... :/

j'aurais dit oui, sans hésiter, et j'aurais eu tort : le man de bash le présente comme un «opérateur de contrôle», au même titre que «;», etc.


eval, c'est mal.

Hors ligne

#23 Le 02/06/2011, à 17:18

FRUiT

Re : [Résolu]question sur grep... :/

Bah un opérateur c'est en quelque sorte « built in » aussi en même temps.


Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#24 Le 02/06/2011, à 17:29

Watael

Re : [Résolu]question sur grep... :/

les built-in sont les commandes internes, elles apparaissent dans le man de builtins.

on peut taper

help <commande>

mais pas

help |

sad
cependant, c'est effectivement codé dans l'interpréteur, donc "built in".

après, savoir combien de bouts possède un bout de bois ...


eval, c'est mal.

Hors ligne

Haut de page ↑