14-commandes de recherche sous linux grep,find #darija
Table des matières:
- Syntaxe de la commande Grep
- Comment utiliser
grep
pour rechercher une chaîne dans des fichiers - Inverser la correspondance (exclure)
- Comment utiliser Grep pour rechercher une chaîne dans la sortie de commande
- Recherche récursive
- Afficher uniquement le nom de fichier
- Recherche insensible à la casse
- Rechercher des mots entiers
- Afficher les numéros de ligne
- Nombre de matchs
- Rechercher plusieurs chaînes (motifs)
- Mode silencieux
- Expression régulière de base
- Expressions régulières étendues
- Imprimer les lignes avant une correspondance
- Imprimer les lignes après une correspondance
- Conclusion
La commande
grep
qui signifie «impression d'expression régulière globale» est l'une des commandes les plus puissantes et les plus couramment utilisées sous Linux.
Grep recherche dans un ou plusieurs fichiers d'entrée des lignes qui correspondent à un modèle donné et écrit chaque ligne correspondante dans la sortie standard. Si aucun fichier n'est spécifié,
grep
lit à partir de l'entrée standard, qui est généralement la sortie d'une autre commande.
Dans ce tutoriel, nous allons vous montrer comment utiliser la commande
grep
travers des exemples pratiques et des explications détaillées des options
grep
les plus courantes.
Syntaxe de la commande Grep
Avant d'entrer dans la façon d'utiliser la commande
grep
, commençons par revoir la syntaxe de base.
Les expressions de l'utilitaire
grep
prennent la forme suivante:
grep PATTERN
Les éléments entre crochets sont facultatifs.
-
OPTIONS
- Zéro ou plusieurs options. Grep fournit un certain nombre d'options qui contrôlent son comportement.PATTERN
- Motif de recherche.FILE
- Zéro ou plusieurs noms de fichier d'entrée.
Pour pouvoir rechercher le fichier, l'utilisateur exécutant la commande doit avoir un accès en lecture au fichier.
Comment utiliser
grep
pour rechercher une chaîne dans des fichiers
L'utilisation la plus élémentaire de la commande
grep
est de rechercher une chaîne (texte) dans un fichier.
Par exemple, pour afficher les lignes du fichier
/etc/passwd
contenant la chaîne
bash
vous pouvez utiliser la commande suivante:
grep bash /etc/passwd
La sortie devrait ressembler à ceci:
root:x:0:0:root:/root:/bin/bash linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Si la chaîne comprend des espaces, vous devez la mettre entre guillemets simples ou doubles:
grep "Gnome Display Manager" /etc/passwd
Inverser la correspondance (exclure)
Pour afficher les lignes qui ne correspondent pas à un modèle, utilisez l'option
-v
(ou
--invert-match
).
Par exemple, pour afficher les lignes du fichier
/etc/passwd
qui ne contiennent pas la chaîne de
nologin
vous pouvez utiliser la commande suivante:
grep -v nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash colord:x:124:124::/var/lib/colord:/bin/false git:x:994:994:git daemon user:/:/usr/bin/git-shell linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Comment utiliser Grep pour rechercher une chaîne dans la sortie de commande
Au lieu de spécifier des fichiers d'entrée, vous pouvez diriger la sortie d'une autre commande vers
grep
, puis afficher uniquement les lignes correspondant à un modèle donné.
Par exemple, pour savoir quels processus s'exécutent sur votre système en tant qu'utilisateur
www-data
vous pouvez utiliser la commande
ps
suivante:
ps -ef | grep www-data
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
Vous pouvez également chaîner plusieurs tuyaux sur commande. Comme vous pouvez le voir dans la sortie ci-dessus, il y a aussi une ligne contenant le processus
grep
. Si vous ne voulez pas que cette ligne soit affichée, passez la sortie à une autre instance
grep
comme indiqué ci-dessous.
ps -ef | grep www-data | grep -v grep
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
Recherche récursive
Pour rechercher récursivement un modèle, utilisez l'option
-r
(ou
--recursive
). Cela va rechercher dans tous les fichiers du répertoire spécifié, en sautant les liens symboliques qui sont rencontrés récursivement. Pour suivre tous les liens symboliques, utilisez l'option
-R
(ou
--dereference-recursive
).
Dans l'exemple suivant, nous recherchons la chaîne
linuxize.com
dans tous les fichiers du répertoire
/etc
:
grep -r linuxize.com /etc
La commande imprimera les lignes correspondantes préfixées par le chemin d'accès complet au fichier.
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com;
Si à la place
-r
vous utilisez l'option
-R
,
grep
suivra tous les liens symboliques:
grep -R linuxize.com /etc
Remarquez la dernière ligne de la sortie. Cette ligne n'est pas imprimée dans l'exemple ci-dessus car les fichiers à l'intérieur du répertoire
sites-enabled
les
sites-enabled
de Nginx sont des liens symboliques vers des fichiers de configuration à l'intérieur du répertoire des
sites-available
.
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com; /etc/nginx/sites-enabled/linuxize.com: server_name linuxize.com www.linuxize.com;
Afficher uniquement le nom de fichier
Pour supprimer la sortie
grep
par défaut et imprimer uniquement les noms des fichiers contenant le modèle correspondant, vous pouvez utiliser l'option
-l
(ou
--files-with-matches
).
Par exemple, pour rechercher dans tous les fichiers se terminant par
.conf
dans le répertoire de travail actuel et imprimer uniquement les noms des fichiers contenant la chaîne
linuxize.com
:
grep -l linuxize.com *.conf
La sortie ressemblera à ceci:
tmux.conf haproxy.conf
L'option
-l
est généralement utilisée en combinaison avec l'option récursive
-R
:
Recherche insensible à la casse
Par défaut, la commande
grep
est sensible à la casse. Cela signifie que les caractères majuscules et minuscules sont traités comme distincts.
Pour ignorer la casse lors de la recherche, utilisez l'option
-i
(ou
--ignore-case
).
Par exemple, lors de la recherche de
Zebra
sans aucune option, la commande suivante n'affichera aucune sortie, c'est-à-dire qu'il y a des lignes correspondantes:
grep Zebra /usr/share/words
Mais si vous effectuez une recherche ne respectant pas la casse à l'aide de l'option
-i
, elle correspondra aux lettres majuscules et minuscules:
grep -i Zebra /usr/share/words
La spécification de «Zebra» correspondra à «zebra», «ZEbrA» ou à toute autre combinaison de lettres majuscules et minuscules pour cette chaîne.
Rechercher des mots entiers
Lors de la recherche de «gnu»,
grep
imprimera également les lignes où «gnu» est incorporé dans des mots plus gros, tels que «cygnus» ou «magnum».
grep gnu /usr/share/words
cygnus gnu interregnum lgnu9d lignum magnum magnuson sphagnum wingnut
Pour renvoyer uniquement les lignes où la chaîne spécifiée est un mot entier (entouré de caractères non
--word-regexp
), utilisez l'option
-w
(ou
--word-regexp
).
az
,
AZ
et
0-9
) et des traits de soulignement (
_
). Tous les autres caractères sont considérés comme des caractères non verbaux.
grep -w gnu /usr/share/words
Afficher les numéros de ligne
Pour afficher le nombre de lignes contenant une chaîne correspondant à un modèle, utilisez l'option
-n
(ou
--line-number
). Lorsque vous utilisez cette option,
grep
imprimera les correspondances sur la sortie standard préfixée avec le numéro de ligne sur lequel elle a été trouvée.
Par exemple, pour afficher les lignes du fichier
/etc/services
contenant la chaîne
bash
préfixée du numéro de ligne correspondant, vous pouvez utiliser la commande suivante:
grep -n 10000 /etc/services
La sortie ci-dessous nous montre que les correspondances se trouvent sur les lignes 10423 et 10424.
10423:ndmp 10000/tcp 10424:ndmp 10000/udp
Nombre de matchs
Pour imprimer un nombre de lignes correspondantes sur la sortie standard, utilisez l'option
-c
(ou
--count
).
Dans l'exemple ci-dessous, nous comptons le nombre de comptes qui ont
/usr/bin/zsh
comme shell.
grep -c '/usr/bin/zsh' /etc/passwd
Rechercher plusieurs chaînes (motifs)
Deux modèles de recherche ou plus peuvent être joints à l'aide de l'opérateur OR
|
.
Par défaut,
grep
interprète le modèle comme une expression régulière de base où les méta-caractères tels que
|
perdent leur signification particulière, et leurs versions rétro-obliques doivent être utilisées.
Dans l'exemple ci-dessous, nous recherchons toutes les occurrences des mots
fatal
,
error
et
critical
dans le fichier d'erreur du journal Nginx:
grep 'fatal\|error\|critical' /var/log/nginx/error.log
grep -E 'fatal|error|critical' /var/log/nginx/error.log
Mode silencieux
Le
-q
(ou
--quiet
) indique à
grep
de ne rien écrire sur le terminal (sortie standard). Si une correspondance est trouvée, la commande se termine avec le statut
0
. Ceci est utile lorsque vous utilisez
grep
dans des scripts shell où vous souhaitez vérifier si un fichier contient une chaîne et effectuer une certaine action en fonction du résultat.
Voici un exemple d'utilisation de
grep
en mode silencieux comme commande de test dans une instruction
if
:
if grep -q PATTERN filename then echo pattern found else echo pattern not found fi
Expression régulière de base
GNU Grep a deux ensembles de fonctionnalités d'expression régulière, de base et étendu. Par défaut,
grep
interprète le modèle comme une expression régulière de base.
Lorsqu'ils sont utilisés en mode d'expression régulière de base, tous les autres caractères, à l'exception des méta-caractères, sont en fait des expressions régulières qui se correspondent. Voici une liste des méta-caractères les plus couramment utilisés:
-
Utilisez le symbole
^
(caret) pour faire correspondre l'expression au début d'une ligne. Dans l'exemple suivant, la chaîne^kangaroo
ne correspondra que si elle se produit au tout début d'une ligne.grep "^kangaroo" file.txt
Utilisez le symbole
$
(dollar) pour faire correspondre l'expression à la fin d'une ligne. Dans l'exemple suivant, la chaînekangaroo$
ne correspondra que si elle se produit à la toute fin d'une ligne.grep "kangaroo$" file.txt
Utilisez le
.
(point) pour correspondre à n'importe quel caractère. Par exemple, pour faire correspondre tout ce qui commence parkan
puis a deux caractères et se termine par la chaîneroo
, vous pouvez utiliser le modèle suivant:grep "kan..roo" file.txt
Utilisation
accept
ou «accent
, vous pouvez utiliser le modèle suivant:grep "accet" file.txt
Utilisation
co(any_letter_except_l)a
, commecoca
,cobalt
, etc., mais ne correspondra pas aux lignes contenantcola
,grep "coa" file.txt
Pour échapper à la signification spéciale du caractère suivant, utilisez le symbole
\
(barre oblique inverse).
Expressions régulières étendues
Pour interpréter le modèle comme une expression régulière étendue, utilisez l'option
-E
(ou
--extended-regexp
). Les expressions régulières étendues incluent tous les méta-caractères de base, ainsi que des méta-caractères supplémentaires pour créer des modèles de recherche plus complexes et plus puissants. Voici quelques exemples:
-
Faites correspondre et extraire toutes les adresses e-mail d'un fichier donné:
grep -E -o "\b+@+\.{2, 6}\b" file.txt
Faites correspondre et extrayez toutes les adresses IP valides d'un fichier donné:
grep -E -o '(25|2|??)\.(25|2|??)\.(25|2|??)\.(25|2|??)' file.txt
L'option
-o
est utilisée pour imprimer uniquement la chaîne correspondante.
Imprimer les lignes avant une correspondance
Pour imprimer un nombre spécifique de lignes avant de faire correspondre les lignes, utilisez l'option
-B
(ou
--before-context
).
Par exemple, pour afficher cinq lignes de contexte de tête avant de faire correspondre les lignes, vous utiliseriez la commande suivante:
Imprimer les lignes après une correspondance
Pour imprimer un nombre spécifique de lignes après les lignes correspondantes, utilisez l'option
-A
(ou
--after-context
).
Par exemple, pour afficher cinq lignes de contexte de fin après les lignes correspondantes, vous utiliseriez la commande suivante:
Conclusion
La commande
grep
vous permet de rechercher un modèle à l'intérieur des fichiers. Si une correspondance est trouvée, grep imprimera les lignes contenant le motif spécifié.
Il y a beaucoup plus à apprendre sur Grep sur la page du manuel de l'utilisateur de Grep.
terminal grepMicrosoft profite en vendant des publicités en ligne sur son moteur de recherche à des gangs criminels gérant des sites Web pharmaceutiques offrant des médicaments Selon une nouvelle étude, Microsoft vend des publicités en ligne sur son moteur de recherche à des gangs criminels qui gèrent des sites Web pharmaceutiques offrant des médicaments à des personnes sans ordonnance adéquate.

Environ 89,7% des Selon le rapport, les pharmacies qui paient des publicités sur le dernier moteur de recherche de la société, Bing.com, sont frauduleuses ou se livrent à des activités illégales. KnujOn, une compagnie antispam, et LegitScript, qui offre un service qui vérifie la légitimité de certaines pharmacies en ligne, ont publié le rapport.
Rechercher des informations dans les fichiers texte Indexer des fichiers Recherche des mots Lite

Recherche des fichiers d'index Les mots Lite sont comme votre propre Google ... sont sur votre disque dur
Microsoft prend au sérieux les allégations selon lesquelles des partenaires commerciaux se livrent à des pots-de-vin pour obtenir des marchés publics dans trois pays en dehors des États-Unis, le Microsoft a pris mardi au sérieux les accusations selon lesquelles des partenaires commerciaux se seraient livrés à des pots-de-vin pour obtenir des marchés publics dans trois pays en dehors des Etats-Unis, a annoncé mardi le Wall Street Journal. la Securities and Exchange Commission des États-Unis enquê

[Lectures supplémentaires: Votre nouvel ordinateur a besoin de ces 15 programmes gratuits et excellents]