logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 05-02-2022 19:09:37

VBrice
Membre
Inscription : 04-10-2021

[Résolu]remplacement d'une chaine de caratere dans chaine de caratere

Bonjour,

Dans mon concky j'utilise pour afficher les details

execi 1000 grep model /proc/cpuinfo | cut -d : -f2 | tail -1


ce qui me donne : "Intel (R)   Core(TM)     i5-3570 CPU @ 3.40GHz"

Je souhaite supprimer le (R) et le (TM)


Si j'utilise la commande tr

execi 1000 grep model /proc/cpuinfo | cut -d : -f2 | tail -1 | tr '(R)(TM)' ' '


cela me retourne bien "Intel   Core     i5-3570 CPU @ 3.40GHz" mais la commande cherche à remplacer lettre par lettre toutes les parenthèses, tout les R majuscule tous les T et M majuscule...
La j'ai de la chance car je n'est pas d'autre des ces caractères dans mon cpuinfo, mais si un jour je me retrouve avec un M majuscule dans la dénomination, il sera supprimer.

Je cherche donc une commande pour supprimer uniquement le groupe de lettre (R) et (TM), que celles qui sont entre parenthèse.

J'ai regarder aussi la commande sed qui correspond mieux au besoin, mais elle demande un fichier d'entrée

Si vous avez des idées, je suis preneur idea.gif

Dernière modification par VBrice (05-02-2022 20:00:40)

Hors ligne

#2 05-02-2022 19:36:03

David5647
Membre
Distrib. : Debian Sid
Noyau : 5.15.0-2-amd64
(G)UI : i3wm + des bouts de kde
Inscription : 27-08-2017

Re : [Résolu]remplacement d'une chaine de caratere dans chaine de caratere

Avec sed :

explicitement le (R) et le (TM):

grep model /proc/cpuinfo | cut -d : -f2 | tail -1 | sed 's/\((R)\|(TM)\)//g'

ou tout ce qui est entre parenthèses:

grep model /proc/cpuinfo | cut -d : -f2 | tail -1 | sed 's/(\w*)//g'

Hors ligne

#3 05-02-2022 19:59:00

VBrice
Membre
Inscription : 04-10-2021

Re : [Résolu]remplacement d'une chaine de caratere dans chaine de caratere

Rapide et parfait, quel pro de la commande smile merci beaucoup je vais étudier ça smile

Hors ligne

#4 06-02-2022 15:03:10

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : [Résolu]remplacement d'une chaine de caratere dans chaine de caratere

Hello,

Je ne trouve pas beau toutes ces commandes "pipées".
Une seule suffit, par exemple :

awk -F: '/^model name/ { gsub(/\([Tt][Mm]\)|\(Rr\)/, "", $2); print $2; exit }' /proc/cpuinfo


pour n'enlever que les (TM) (tm) (R) (r) ou aussi les (Tm) (tM).

Ou pour enlever tout ce qu'il y a entre parenthèses (parenthèses comprises) :

awk -F: '/^model name/ { gsub(/\([^\)]*\)/, "", $2); print $2; exit }' /proc/cpuinfo



Edit:
Ou avec sed tout seul (un peu plus compliqué, pas trouvé plus simple) :

sed '/^model name/{s/^model name[[:blank:]]*:[[:blank:]]*//; s/([^)]*)//g; q};d' /proc/cpuinfo


ou comme [:blank:] = \s

sed '/^model name/{s/^model name\s*:\s*//; s/([^)]*)//g; q};d' /proc/cpuinfo



Edit2:
Les commandes seules (awk ou sed) sont moins gourmandes en ressources que les commandes pipées :

$ time sed '/^model name/{s/^model name\s*:\s*//;s/([^)]*)//g;q};d' /proc/cpuinfo
AMD Athlon X2 Dual-Core QL-62

real  0m0,014s
user  0m0,005s
sys 0m0,008s
$
$ time grep model /proc/cpuinfo | cut -d : -f2 | tail -1 | sed 's/(\w*)//g'
 AMD Athlon X2 Dual-Core QL-62

real  0m0,059s
user  0m0,013s
sys 0m0,039s
$

Dernière modification par Tawal (06-02-2022 16:13:11)


Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#5 06-02-2022 16:51:42

David5647
Membre
Distrib. : Debian Sid
Noyau : 5.15.0-2-amd64
(G)UI : i3wm + des bouts de kde
Inscription : 27-08-2017

Re : [Résolu]remplacement d'une chaine de caratere dans chaine de caratere

Mais comment elles sont longuuuuuuuuuuuuuuuuuuuuuuuues tes commandes:

edit : Attention! !!!TROLL!!! ne pas utiliser la commande telle quelle, cf message en dessous

sed '/l n/{s/\(^[^:]*:\s*\|(\w*)\)//g;q};d' /p*/cp*



(haha, bien joué tongue )

Dernière modification par David5647 (06-02-2022 18:56:22)

Hors ligne

#6 06-02-2022 17:34:47

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : [Résolu]remplacement d'une chaine de caratere dans chaine de caratere

lol
mais remplace quand même \w* par [^)]* wink
car :

$ a="model name : Nom_CPU(TM) le reste(mot+caractère_spécial©)"
$
$ sed '/l n/{s/\(^[^:]*:\s*\|(\w*)\)//g;q};d' <<<"$a"
Nom_CPU le reste(mot+caractère_spécial©)
$
$ sed '/l n/{s/\(^[^:]*:\s*\|([^)]*)\)//g;q};d' <<<"$a"
Nom_CPU le reste
$


Et pas trop bon le /p*/cp*, faut pas exagérer non plus et c'est un tantinet risqué tongue

Sinon, belle écriture yes.gif


Edit:
On retient donc pour VBrice la commande la plus concise, efficace et sûre :

sed '/l n/{s/\(^[^:]*:\s*\|([^)]*)\)//g;q};d' /proc/cpuinfo

Dernière modification par Tawal (06-02-2022 17:46:54)


Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#7 06-02-2022 19:10:07

David5647
Membre
Distrib. : Debian Sid
Noyau : 5.15.0-2-amd64
(G)UI : i3wm + des bouts de kde
Inscription : 27-08-2017

Re : [Résolu]remplacement d'une chaine de caratere dans chaine de caratere

Tawal a écrit :

Et pas trop bon le /p*/cp*, faut pas exagérer non plus et c'est un tantinet risqué

le match sur "l n" est pas mal forcé aussi ^^
Oui, je vais préciser que c'est un peu troll qd même

Et pt'être pour préciser à VBrice et à ceux qui débutent dans la manipulation d'expression régulière:
La concision et le temps d’exécution de ce genre de traitement de texte est généralement peu important,

je vois deux points important lors de la constitution d'une expression:
    - le temps qu'on met à la constituer : faites au plus vite, ça sert à rien d'optimiser pdt des heures une expression
    - faites la robuste : essayer de constituer une expression la plus restrictive possible pour éviter les erreurs, surtout si le programme évolue.
  ( - sa lisibilité : plus facile à maintenir si on revient dessus plus tard, les commandes de départ avec les pipes au awk sont plus lisibles que les dernières avec sed)

Après c'est un p'tit jeu stimulant que de se prendre la tête à faire la plus consiste, la plus rapide des expressions

Dernière modification par David5647 (06-02-2022 19:13:42)

Hors ligne

#8 06-02-2022 19:37:57

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : [Résolu]remplacement d'une chaine de caratere dans chaine de caratere

Le 1er point à voir pour constituer une expression régulière (regex), c'est de bien définir à quoi elle doit correspondre.

Et non, je ne dirais pas d'aller vite, au contraire, essayer de bien voir toute la portée de la regex qu'on a écrit.

Ensuite, l'expérience et la connaissance fait qu'on les construit plus vite et plus robustes wink

Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

Pied de page des forums