Outils pour utilisateurs

Outils du site


issue223:c_c

We have talked about quite a few things in our CnC articles so far. However, there is one, even I struggle with sometimes, mainly because I don’t get to use it often. So as a refresher, let’s talk about grep. As an Ubuntu newbie, it will not be high on your priority list, however, it is something you will use if you ever work in an environment that is Linux-based. Even if you never do, it is a rather weird thing to master. When you use it, to untrained eyes, it will seem like magic. In the last issue, I gave you some examples before explaining and the eagle eyed may have noticed a “^” that I did not mention. Let’s continue where we left off… Special characters let you match wider patterns than we did before. For example, you can find lines that, contain a number “[0-9]”, or maybe start with a capital letter “^[A-Z]”, or end with a full stop “\.$”. The caret (^), matches the start of a line. For example, to find lines starting with “For”, like this one: egrep “^For” <filename> This will ignore matches like “with For” where “For” itself doesn‘t *start the line. Also square brackets are not only ones we use, curly braces and parenthesis are valid too.

Nous avons abordé pas mal de sujets dans nos articles sur les commandes et le contrôle jusqu'à présent. Cependant, il y en a un avec lequel j'ai parfois moi-même du mal, principalement parce que je ne l'utilise pas souvent. Alors, pour rappel, parlons de grep. Si vous débutez sous Ubuntu, ce ne sera probablement pas votre priorité, mais vous l'utiliserez forcément si vous travaillez un jour dans un environnement Linux. Même si ce n'est jamais le cas, sa maîtrise est assez déroutante. Pour un œil non averti, son utilisation peut paraître magique.

Dans le dernier article, je vous ai donné quelques exemples avant de les expliquer, et les plus observateurs auront peut-être remarqué un « ^ » que je n'ai pas mentionné. Reprenons là où nous nous étions arrêtés…

Les caractères spéciaux permettent de trouver des motifs de recherche plus larges que précédemment. Par exemple, vous pouvez trouver des lignes contenant un chiffre « [0-9] », commençant par une lettre majuscule « ^ [A-Z] » ou se terminant par un point « \.$ ».

Le symbole accent circonflexe (^) correspond au début d'une ligne. Par exemple, pour trouver les lignes commençant par « For », comme ceci :

egrep “^For” <nom_de_fichier>

Cette commande ignorera les occurrences telles que « with For », où « For » ne commence pas la ligne.

De plus, les crochets ne sont pas les seuls caractères utilisés ; les accolades et les parenthèses sont également valides.

Those curly braces {} give you a specified amount of matches. For example, to match lines containing the letter “w” repeated 3 times, as in a URL: egrep “w{3}” <filename> You can also provide a range. The first parameter being the low end: grep “w{3,9}” <filename> - matches “w” repeated 3 up to 9 times: Like in school, parenthesis group things together. In the last issue we mentioned the “+”, egrep “fcm+” <filename> matches fcmmmm, for instance, but by using the parenthesis, we can surround fcm in that query, like so: egrep “(fcm)+” <filename> to find more instances of fcm. OK, looking at the “special characters sentence again. You also may have noticed that I passed over the dollar sign ($). Yep, the quick ones will say it is the opposite of the caret and you would be correct! The dollar sign ($) matches the end of a line. For example, to find lines ending with a “fcm”: egrep “fcm$” <filename> It sounds weird, so here is an example: if I was looking for org. ending a line, I find none, even if the pattern can be matched, multiple times.

Les accolades {} permettent de spécifier un nombre précis de correspondances. Par exemple, pour trouver les lignes contenant la lettre « w » répétée 3 fois, comme dans une URL : « egrep “w{3}” <nom_de_fichier> »

Vous pouvez également spécifier une plage. Le premier paramètre correspond à la limite inférieure : « grep “w{3,9}” <nom_de_fichier> » trouve les occurrences de « w » répétées de 3 à 9 fois.

Comme à l'école, les parenthèses permettent de regrouper des éléments. Dans le numéro précédent, nous avons mentionné le signe « + » : « egrep “fcm+” <nom_de_fichier> » trouve par exemple « fcmmmm », mais en utilisant des parenthèses, nous pouvons inclure « fcm » dans cette requête, comme ceci : « egrep “(fcm)+” ​​<nom_de_fichier> » pour trouver d'autres occurrences de « fcm ».

OK, revenons à la phrase sur les caractères spéciaux. Vous avez peut-être remarqué que j'ai omis le signe dollar ($). Effectivement, les plus rapides diront qu'il est l'inverse de l'accent circonflexe, et ils auront raison ! Le signe dollar ($) correspond à la fin d'une ligne. Par exemple, pour trouver les lignes se terminant par « fcm » : « egrep “fcm$” <nom_de_fichier> »

Cela peut paraître étrange, alors voici un exemple : si je recherche « org. » en fin de ligne, je ne trouve rien, même si le motif apparaît plusieurs fois.

I could even search for “\.” and find hundreds, but if I were to search for a full stop *ending a line, (“\.$”) I’d find none, as it is a JSON file not a sentence. If I perform it on a file containing sentences, the result speaks for itself: end of the line We can combined what we have learned so far, so if we wanted to find a word that is on its own, I can use both the caret and the dollar sign. The -i is just case insensitive, but I found the header FCM, but not the line following it, saying: “FCM is an online… blah blah” If you are a newbie, I want you to try it. Here we can see that Bash does not appear alone or at the beginning or at the end of the output of inxi. Homework, I want you to pipe the output of inxi -F to grep and see if “CPU:” appears on its own line. Does “drivers:” ? Does “info:” ? Now just output inxi -F and see if you were correct.

Je pourrais même rechercher « \. » et en trouver des centaines, mais si je recherchais un point en fin de ligne (« \.$ »), je n'en trouverais aucun, car il s'agit d'un fichier JSON et non d'une phrase. Si je fais la même chose sur un fichier contenant des phrases, le résultat est clair :

fin de ligne

Nous pouvons combiner ce que nous avons appris jusqu'à présent. Ainsi, pour trouver un mot isolé, je peux utiliser à la fois le symbole accent circonflexe (^) et le signe dollar ($).

L'option `-i` est insensible à la casse, mais j'ai trouvé l'en-tête FCM, mais pas la ligne suivante qui dit : « FCM is an online… blah blah ».

Si vous débutez, essayez !

On constate ici que Bash n'apparaît ni seul, ni au début, ni à la fin de la sortie de `inxi`.

Devoir : redirigez la sortie de `inxi -F` vers `grep` et vérifiez si « CPU: » apparaît sur sa propre ligne. Est-ce le cas pour « drivers: » ? Et pour « info: » ? Il ne vous reste plus qu'à exécuter la commande `inxi -F` pour vérifier si votre réponse était correcte.

Now comes the challenges, using what you have learned, I want you to find your MAC address from the output of inxi -F, using egrep. Secondly, I want you to find your cpu temperature, from the output of inxi -F, using egrep. Thirdly, I want you to find the uptime hours (only!) from the output of inxi -F, using egrep. Lastly I want you to use egrep to tell me if you have a desktop or a laptop, from the output of inxi -F (or server). If you can do all these, grep should be imprinted with you for at least a month! :) So like I used -i for case insensitive searches you can use -v to invert said searches. With that knowledge, I want you to undertake a small challenge. Challenge use egrep to filter the output of df to exclude temporary filesystems and show only your real drives. Comments: misc@fullcirclemagazine.org

Voici maintenant les défis : en utilisant vos connaissances, je vous demande de trouver votre adresse MAC à partir de la sortie de « inxi -F », en utilisant « egrep ».

Deuxièmement, je vous demande de trouver la température de votre processeur à partir de la sortie de « inxi -F », en utilisant « egrep ».

Troisièmement, je vous demande de trouver la durée de fonctionnement (uniquement les heures de fonctionnement !) à partir de la sortie de « inxi -F », en utilisant « egrep ».

Enfin, je vous demande d'utiliser `« egrep » pour déterminer si vous possédez un ordinateur de bureau ou un ordinateur portable, à partir de la sortie de « inxi -F » (ou serveur).

Si vous réussissez tous ces exercices, vous n'aurez plus besoin de « grep » pour un bon moment ! :)

De la même manière que j'ai utilisé « -i » pour les recherches insensibles à la casse, vous pouvez utiliser « -v » pour inverser ces recherches. Fort de ces connaissances, je vous propose un petit défi.

Défi :

Utilisez « egrep » pour filtrer la sortie de « df » afin d'exclure les systèmes de fichiers temporaires et d'afficher uniquement vos disques physiques.

Commentaires : misc@fullcirclemagazine.org

issue223/c_c.txt · Dernière modification : 2025/12/01 09:02 de d52fr