Dans les systèmes Linux et Unix, Grep, abréviation de « global regular expression print », est une commande utilisée pour rechercher et faire correspondre les fichiers texte contenus dans les expressions régulières. De plus, la commande est préinstallée dans chaque distribution Linux. Dans ce guide, nous examinerons l'utilisation de la commande grep commune avec quelques exemples.
Commande Grep sous Linux
La commande Grep peut être utilisée pour trouver ou rechercher une expression régulière ou une chaîne dans un fichier texte. Pour le démontrer, créons un fichier texte welcome.txt et ajoutez du contenu comme indiqué.
Welcome to Linux !
Linux is a free and opensource Operating system that is mostly used by
developers and in production servers for hosting crucial components such as web
and database servers. Linux has also made a name for itself in PCs.
Beginners looking to experiment with Linux can get started with friendlier linux
distributions such as Ubuntu, Mint, Fedora and Elementary OS.
Super! Nous sommes maintenant prêts à exécuter quelques commandes grep et à manipuler la sortie pour obtenir les résultats souhaités.
Pour rechercher une chaîne dans un fichier, exécutez la commande ci-dessous
Syntaxe
$ grep "string" file name
OU
$ filename grep "string"
Exemple :
$ grep "Linux" welcome.txt
Sortie
Comme vous pouvez le voir, grep a non seulement recherché et mis en correspondance la chaîne "Linux", mais a également imprimé les lignes dans lesquelles la chaîne apparaît.
Si le fichier se trouve dans un chemin de fichier différent, assurez-vous de spécifier le chemin du fichier comme indiqué ci-dessous
$ grep "string" /path/to/file
Colorisation des résultats de Grep à l'aide de l'option –color
Si vous travaillez sur un système qui n'affiche pas la chaîne ou le motif de recherche dans une couleur différente du reste du texte, utilisez le --color
pour faire ressortir vos résultats.
Exemple
$ grep --color "free and opensource" welcome.txt
Sortie
Rechercher une chaîne de manière récursive dans tous les répertoires
Si vous souhaitez rechercher une chaîne dans votre répertoire actuel et tous les autres sous-répertoires, recherchez en utilisant le - r
drapeau comme indiqué
$ grep -r "string-name" *
Par exemple
$ grep -r "linux" *
Sortie
Ignorer la sensibilité à la casse
Dans l'exemple ci-dessus, nos résultats de recherche nous ont donné ce que nous voulions car la chaîne "Linux" était spécifiée en majuscule et existe également dans le fichier en majuscule. Essayons maintenant de rechercher la chaîne en minuscules.
$ grep "linux" file name
Rien de la sortie, non? C'est parce que grepping n'a pas pu trouver et faire correspondre la chaîne "linux" puisque la première lettre est en minuscule. Pour ignorer la sensibilité à la casse, utilisez le -i
drapeau et exécutez la commande ci-dessous
$ grep -i "linux" welcome.txt
Sortie
Génial n'est-ce pas ? Le - i
est normalement utilisé pour afficher des chaînes indépendamment de leur sensibilité à la casse.
Compter les lignes où les chaînes correspondent à l'option -c
Pour compter le nombre total de lignes où le modèle de chaîne apparaît ou réside, exécutez la commande ci-dessous
$ grep -c "Linux" welcome.txt
Sortie
Utiliser Grep pour inverser la sortie
Pour inverser la sortie Grep, utilisez le -v
drapeau. Le -v
L'option demande à grep d'imprimer toutes les lignes qui ne contiennent pas ou ne correspondent pas à l'expression.
L'option –v indique à grep d'inverser sa sortie, ce qui signifie qu'au lieu d'imprimer les lignes correspondantes, faites le contraire et imprimez toutes les lignes qui ne correspondent pas à l'expression. Pour en revenir à notre fichier, affichons les numéros de ligne comme indiqué.
Appuyez sur ESC dans l'éditeur Vim, tapez deux-points complets suivis de
set nu
Ensuite, appuyez sur Entrée
Sortie
Maintenant, pour afficher les lignes qui ne contiennent pas la chaîne "Linux", exécutez
$ grep -v "Linux" welcome.txt
Sortie
Comme vous pouvez le voir, grep a affiché les lignes qui ne contiennent pas le motif de recherche.
Numérotez les lignes qui contiennent le motif de recherche avec l'option -n
Pour numéroter les lignes où le modèle de chaîne correspond, utilisez le -n
comme indiqué
$ grep -n "Linux" welcome.txt
Sortie
Rechercher le mot correspondant exact à l'aide de l'option -w
En passant puis -w
flag recherchera la ligne contenant le mot correspondant exact comme indiqué
$ grep -w "opensource" welcome.txt
Sortie
Cependant, si vous essayez
$ grep -w "open" welcome.txt
AUCUN résultat ne sera renvoyé car nous ne recherchons pas un motif mais un mot exact !
Utiliser des tubes avec grep
La commande grep peut être utilisée avec des canaux pour obtenir une sortie distincte.
Par exemple, si vous voulez savoir si un certain paquet est installé dans le système Ubuntu, exécutez
$ dpkg -L | grep "package-name"
Par exemple, pour savoir si OpenSSH a été installé dans votre tube système, le dpkg -l
commande pour grep comme indiqué
$ dpkg -L | grep -i "openssh"
Sortie
Affichage du nombre de lignes avant ou après un motif de recherche à l'aide de tubes
Vous pouvez utiliser le -A ou -B pour afficher le nombre de lignes qui précèdent ou viennent après la chaîne de recherche. Le -A flag désigne les lignes qui viennent après la chaîne de recherche et -B imprime la sortie qui apparaît avant la chaîne de recherche.
Par exemple
$ ifconfig | grep -A 4 ens3
Cette commande affiche la ligne contenant la chaîne plus 4 lignes de texte après le ens chaîne dans le ifconfig
commande.
Sortie
Inversement, dans l'exemple ci-dessous, l'utilisation du drapeau -B affichera la ligne contenant la chaîne de recherche plus 3 lignes de texte avant l'éther chaîne dans le ifconfig
commande.
Sortie
$ ifconfig | grep -B 4 ether
Utiliser grep avec des expressions régulières (REGEX)
Le terme REGEX est un acronyme pour REG ulaire EX pression. Une REGEX est une séquence de caractères utilisée pour correspondre à un modèle. Voici quelques exemples :
^ Matches characters at the beginning of a line
$ Matches characters at the end of a line
"." Matches any character
[a-z] Matches any characters between A and Z
[^ ..] Matches anything apart from what is contained in the brackets
Exemple
Pour imprimer des lignes commençant par un certain caractère, la syntaxe est ;
grep ^character file_name
Par exemple, pour afficher les lignes qui commencent par la lettre "d" dans notre fichier welcome.txt, nous exécutons
$ grep ^d welcome.txt
Sortie
Pour afficher les lignes qui se terminent par la lettre "x", exécutez
$ grep x$ welcome.txt
Sortie
Obtenir de l'aide avec plus d'options Grep
Si vous avez besoin d'en savoir plus sur l'utilisation de la commande Grep, exécutez la commande ci-dessous pour obtenir un aperçu des autres indicateurs ou options que vous pouvez utiliser avec la commande.
$ grep --help
Exemple de sortie
Nous apprécions votre temps pour parcourir ce tutoriel. N'hésitez pas à essayer les commandes et faites-nous savoir comment cela s'est passé.