Dominique Meeùs
Dernière modification le
retour à la table des matières
— à l’index
— à ma page de départ
grep
)La commande grep cherche dans un fichier les lignes contenant un certain motif (pattern) donné par une expression régulière. Par exemple, avec
grep "/Aug/2007:" temp-000000.log > 200708access.log⚓
je sélectionne dans un très long journal de mon site les lignes concernant août 2007
et j’en tire le journal d’août. Attention si on cherche un texte qui serait trompeur
en tant qu’expression régulière ; par grep -F "some string"
, on peut indiquer à grep qu’il ne s’agit que de texte ordinaire, même s’il contient
des signes cabalistiques. On peut chercher dans tous les fichiers d’un répertoire
et de ses sous-répertoires avec grep -r "pattern" path
. Il faut absolument un chemin explicite, donc au moins grep -r "pattern" .
où le point indique le répertoire courant. On peut limiter à un type de fichier par--include
(en n’oubliant pas le point du répertoire courant, ou un autre dossier) :
grep -rF "some string" . --include="*.xml"⚓
La commande grep accepte un joker dans le nom de fichier et l’omission du répertoire
si on cherche seulement dans le répertoire courant. On peut donc écrire grep "string" *.xml
, tandis qu’avec presque la même chose pour le même répertoire courant (mais avec les sous-répertoires en plus), on est
surpris de voir que ça ne marche pas. Il faut comme ci-dessus expliciter le répertoire,
même le répertoire courant, et utiliser alors --include
pour spécifier s’il y a lieu les fichiers.
Si la chaîne contient des signes double quote, il faut les échapper 13 par une barre inversée. Mais on peut aussi utiliser le signe simple quote pour délimiter toute la chaine et imposer une interprétation littérale de son contenu. Par exemple, pour chercher une valeur d’attribut, on pourrait faire :
grep -rF 'list rend="horiz"' . --include="*.xml"⚓
Par défaut, grep retourne les lignes qui contiennent l’expression recherchée (en mentionnant
le fichier). Mais avec grep -l
, on a seulement la liste des fichiers qui contiennent l’expression recherchée. Avec grep -L
, on a le contraire : la liste des fichiers qui ne contiennent pas l’expression recherchée.
⁂
La commande grep
ne cherche que dans les fichiers texte. La commande pdfgrep
fait la même chose dans les PDF (qui contiennent du texte en plus de l’image) et
le programme (GUI) Loook peut le faire dans les fichiers en Open Document Format (ODF, comme .odt .ods…) de
LibreOffice et autres. C’est évidemment très précieux. On n’écrit pas seulement en
HTML et si on se dit : « dans quel fichier parle-t-on de cela ? dans quel fichier
ai-je écrit cela ?… », les pdfgrep
et Loook sont indispensables. On trouve Loook en paquet Debian.