\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{mar. oct. 18 23:16:10 CEST 2016}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={grep},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Affiche les lignes qui contiennent une correspondance pour un motif},
CreationDate={D:20161018231610},
ModDate={D:20161018231610},
Keywords={coreutils;GNU;scripts}
}}
\begin{document}
 
\begin{center}
{\Huge grep }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Affiche les lignes qui contiennent une correspondance pour un motif}
 
\vspace{10mm}
 
\vspace{1cm}{\huge Options - contrôle de correspondance }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} -e PATTERN, --regexp=PATTERN]{Utilise PATTERN comme motif. Si cette option est utilisée plusieurs fois ou combinée avec -f, recherche tous les motifs donnés.}
\item[\hspace{1mm} -f FILE, --file=FILE]{Obtient les patterns depuis le fichier, un par ligne. Si cette option est utilisée plusieurs fois ou combinée avec -e, recherche pour tous les patterns donnés. Un fichier vide ne contient aucun pattern, et ne matche rien.}
\item[\hspace{1mm} -i, --ignore-case]{Ignore la casse.}
\item[\hspace{1mm} -v, --invert-match]{Inverse le sens de match, pour selectionner des lignes non-matchant.}
\item[\hspace{1mm} -w, --word-regexp]{Sélectionne uniquement les lignes contenant les matchs qui forment un mot entier. Le test est que la sous-chaîne matchant doit être soit au début de la ligne, ou précédé par un caractère non-word. Similairement, il est doit être soit à la fin de la ligne ou suivi par un caractère word. N'a pas d'effet avec -x}
\item[\hspace{1mm} -x, --line-regexp]{Sélectionne seulement les matche qui correspondent exactement à la ligne entière.}
\end{description}
 
\vspace{1cm}{\huge Options - Contrôles de sortie généraux }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} -c, --count]{Supprime la sortie normale; Affiche un compteur de lignes correspondantes pour chaque fichier d'entrée. Avec -v, compte les lignes qui ne matchent pas.}
\item[\hspace{1mm} --color\texttt{[}=WHEN\texttt{]}, --colour\texttt{[}=WHEN\texttt{]}]{Mode couleur. Les couleurs sont définies par la variable d'environnement GREP\_COLORS (défaut: ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36)}
\item[\hspace{1mm} -L, --files-without-match]{Supprime la sortie normale; affiche le nom de chaque fichier d'entrée dans lequel aucune sortie ne serait affichée.}
\item[\hspace{1mm} -l, --files-with-matches]{Supprime la sortie normale; affiche le nom de chaque fichier d'entrée dans lequel un sortie aurait été affichée.}
\item[\hspace{1mm} -m NUM, --max-count=NUM]{Stop la lecture d'un fichier après NUM lignes matchant.}
\item[\hspace{1mm} -o, --only-matching]{Affiche seulement les parties matchants des lignes matchant.}
\item[\hspace{1mm} -q, --quiet, --silent]{N'affiche rien sur stdout. Quitte avec un status 0 si un match est trouvé, même si une erreur a été détectée.}
\item[\hspace{1mm} -s, --no-messages]{Supprime les messages d'erreur sur des fichiers non-existants ou illisibles.}
\end{description}
 
\vspace{1cm}{\huge Options - contrôle de préfixe de ligne }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} -b, --byte-offset]{Affiche l'offset dans le fichier d'entrée avant de sortir chaque ligne. si -o est spécifié, affiche l'offset de la partie matchant elle-même.}
\item[\hspace{1mm} -H, --with-filename]{Affiche le nom de fichier pour chaque match. C'est le défaut quand il y a plus d'une fichier à rechercher.}
\item[\hspace{1mm} -h, --no-filename]{Supprime l'ajoute du nom de fichier dans la sortie. C'est le défaut quand il n'y a qu'un fichier ou seulement l'entrée standard à rechercher}
\item[\hspace{1mm} --label=LABEL]{Affiche l'entrée venant de stdin comme entrant depuis le fichier LABEL. Utile pour implémenter des outils comme zgrep (ex: gzip -cd foo.gz | grep --label=foo -H something)}
\item[\hspace{1mm} -n, --line-number]{Préfixe chaque ligne de sortie avec le numéro de ligne dans son fichier d'entrée}
\item[\hspace{1mm} -T, --initial-tab]{S'assure que le premier caractère du contenu de la ligne courante s'appuis sur une tabulation, pour que l'alignement des tabulation semblent normales. Utile avec les options qui préfixent leur sortie avec le contenu actuel.}
\item[\hspace{1mm} -u, --unix-byte-offsets]{Reporte les offsets dans le style Unix.}
\item[\hspace{1mm} -Z, --null]{Affiche un ASCII NUL au lieu du caractère qui suit normalement un nom de fichier.}
\end{description}
 
\vspace{1cm}{\huge Options - Contrôle de ligne de contexte }
 
\
 
\hspace{1mm}  Sans regarder comment ces options sont définies, grep n'affiche jamais une ligne donnée plus d'une fois. Si -o est spécifié, ces options n'ont pas d'effet et une alerte est donée.
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} -A NUM, --after-context=NUM]{Affiche NUM lignes supplémentaires après chaque ligne matchant}
\item[\hspace{1mm} -B NUM, --before-context=NUM]{Affiche NUM lignes supplémentaires avant chaque ligne matchant}
\item[\hspace{1mm} -C NUM, -NUM, --context=NUM]{Affiche NUM lignes avant et après chaque ligne matchant}
\item[\hspace{1mm} --group-separator=STRING]{Avec -A, -B ou -C, affiche un séparateur entre les groupes de ligne}
\item[\hspace{1mm} --no-group-separator]{Avec -A, -B ou -C, n'affiche pas de séparateur entre les groupes de ligne}
\end{description}
 
\hspace{1mm}  Notes sur la manière dont grep choisis le séparateur pour affiche les préfixes:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{6mm} -]{Les lignes matchant utilisent normalement ':' comme séparateur entre les préfixes et le contenu de la ligne courante}
\item[\hspace{6mm} -]{Les ligne non-matchant utilisent - à la place}
\item[\hspace{6mm} -]{Quand le context n'est pas spécifié, les lignes adjacentes dans l'entrée forment un groupe et sont affiche un après l'autre, alors qu'un séparateur apparaît entre les groupes non-adjacents}
\item[\hspace{6mm} -]{Le séparateur par défaut est --}
\item[\hspace{6mm} -]{Chaque groupe peut contenir de nombreuses lignes matchant quand elles sont suffisamment proches et peuvent être fusionnés en une simple zone contigüe.}
\end{description}
 
\vspace{1cm}{\huge Options - Sélection de fichier et de répertoire }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} -a, --text]{Traite un fichier binaire comme si c'était du texte.}
\item[\hspace{1mm} --binary-files=TYPE]{Trait le fichier contenant des données binaire en assumant que le fichier est du type spécifié: binary, without-match, text.}
\item[\hspace{1mm} -D ACTION, --devices=ACTION]{Si un fichier d'entrée est un périphérique, FIFO ou socket, utilise ACTION pour le traiter. Si ACTION est 'read', tous les périphériques sont lus comme si c'étaient des fichiers ordinaires. Si ACTION est 'skip', les périphérique, FIFO, et sockets sont ignorés silencieusement.}
\item[\hspace{1mm} -d ACTION, --directories=ACTION]{Si un fichier d'entrée est un répertoire, utilise l'action pour le traiter. par défaut, ACTION est 'read', qui signifie que les répertoires sont lus comme si c'était des fichiers ordinaires. Si ACTION est 'skip', les répertoire sont ignorés silencieusement. 'recurse' lis tous les fichiers sous chaque répertoire, recursivement.}
\item[\hspace{1mm} --exclude=GLOB]{Saute les fichiers de la ligne de commande avec un suffix de nom qui matche le glob.}
\item[\hspace{1mm} --exclude-from=FILE]{Saute les fichiers dont les noms matchent un des patterns lus depuis le fichier spécifié.}
\item[\hspace{1mm} --exclude-dir=GLOB]{Saute les répertoires de la ligne de commande avec un suffix qui matche le glob.}
\item[\hspace{1mm} -I]{Traite un fichier binaire comme s'il ne contenait pas de données correspondantes. (équivalent à --binary-files=without-match)}
\item[\hspace{1mm} --include=GLOB]{Ne recherche que les fichiers dont les noms matchent le glob.}
\item[\hspace{1mm} -r, --recursive]{Pour chaque opérande répertoire, lit et traite tous les fichiers dans ce répertoire, récursivement. identique à --directories=recurse}
\item[\hspace{1mm} -R, --dereference-recursive]{Pour chaque opérande répertoire, lit et traite tous les fichiers dans ce répertoire, en suivant tous les liens symboliques.}
\end{description}
 
\vspace{1cm}{\huge Autres options }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} --line-buffered]{Utilise le tampon de ligne sur la sortie. Peut réduire les performances}
\item[\hspace{1mm} -U, --binary]{Traite les fichiers en binaire.}
\item[\hspace{1mm} -z, --null-data]{Traite les données d'entrée et de sortie comme séquence de lignes, chacune terminée par un ASCII NUL au lieu d'un newline.}
\end{description}
 
\vspace{1cm}{\huge Variables d'environnement }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} LC\_ALL]{Spécifie la locale}
\item[\hspace{1mm} LC\_COLLATE]{Spécifie la locale pour la catégorie LC\_COLLATE}
\item[\hspace{1mm} LANG]{Spécifie la locale}
\item[\hspace{1mm} LC\_TYPE]{Spécifie la locale pour la catégorie LC\_CTYPE}
\item[\hspace{1mm} LC\_MESSAGES]{Spécifie la locale pour la catégorie LC\_MESSAGES}
\item[\hspace{1mm} LANGUAGE]{Contient une liste séparée par ',' de langages qui remplacent les variables LC\_ALL, LC\_XXX et LANG}
\item[\hspace{1mm} GREP\_COLORS]{Spécifie les couleurs et autres attributs utilisés pour colorer la sortie:}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} sl=]{Lignes sélectionnées}
\item[\hspace{6mm} cx=]{Lignes de context}
\item[\hspace{6mm} rv]{booléen inversant la signification de sl et cx}
\item[\hspace{6mm} mt=01;31]{Texte non-vide dans un ligne matchant.}
\item[\hspace{6mm} ms=01;31]{Texte non vide matchant dans une ligne matchant}
\item[\hspace{6mm} mc=01;31]{texte non-vide matchant dans une ligne de contexte}
\item[\hspace{6mm} fn=35]{Sous-chaîne our les noms de fichier préfixant une ligne}
\item[\hspace{6mm} ln=32]{Sous-chaîne pour les numéros de ligne préfixant une ligne}
\item[\hspace{6mm} bn=32]{Offset préfixant une ligne}
\item[\hspace{6mm} se=36]{Séparateur inséré entre les champs, entre les lignes de contexte et entre les groupes de lignes adjacentes}
\item[\hspace{6mm} ne]{Booléen qui empêche d'effacer la fin d'une ligne avec Erase in Line (EL) à droite chaque fois qu'un élément colorisé prend fin.}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} POSIXLY\_CORRECT]{grep se conforme à POSIX}
\item[\hspace{1mm} \_N\_GNU\_nonoption\_argv\_flags\_]{Où N est l'ID de processus grep. Si le I-ième caractère de cette variable est 1, ne pas considérer la I-ème opérande de grep comme option. Un shell peut définir cette variable pour chaque commande qu'il lance, en spécifiant quels opérandes sont le résultat d'une expansion de nom de fichier. Uniquement avec POSIXLY\_CORRECT}
\end{description}
 
\vspace{1cm}{\huge Codes de sortie }
 
\
 
\hspace{1mm}  Normalement, le code de sortie est 0 si une ligne est sélectionnée, 1 si aucune ligne n'est sélectionnée, et 2 si une erreur se produit.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Programmes grep }
 
\
 
\hspace{1mm}  grep recherche dans les fichiers nommés en entrée à la recherche de lignes contenant un match. Par défaut, grep affiche les lignes matchants. Un fichier nommé '-' signifie l'entrée standard. Si aucune entrée n'est spécifiée, grep recherche le répertoire courant. Si une options spécifie la récursion, cependant, grep recherche l'entrée standard. Il y a 4 variantes majeurs de grep, contrôlés par les options suivantes:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} -G, --basic-regexp]{Interprète le pattern comme expression régulière basique. c'est le mode pas défaut}
\item[\hspace{1mm} -E, --extended-regexp]{Interprète le pattern comme expression régulière étendue.}
\item[\hspace{1mm} -F, --fixed-string]{Interprète le pattern comme une liste de chaîne fixes au lieu d'expressions régulières, séparér par des newline, un d'entre eux doit matcher.}
\item[\hspace{1mm} -P, --perl-regexp]{Interprète le pattern comme expression régulière compatible perl.}
\end{description}
 
\vspace{1cm}{\huge Expressions régulières }
 
\
 
\hspace{1mm}  Une expression régulière est un pattern qui décrit un jeu de chaînes. Les expressions régulières sont construites analoguement aux expressions arithmétiques, en utilisant divers opérateurs pour combiner des expressions plus petites. Grep comprend 3 types d'expressions régulière: basique, étendue, et perl. La suite décrit les expressions régulières étendue.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Structure fondamentale }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} .]{matche un simple caractère}
\item[\hspace{1mm} ?]{L'élément précédent est optionnel et est matché une fois au plus}
\item[\hspace{1mm} * ]{L'élément précédent est matché 0 ou plusieurs fois}
\item[\hspace{1mm} +]{L'élément précédent est matché 1 ou plusieurs fois}
\item[\hspace{1mm} \{N\}]{L'élément précédent est matché N fois}
\item[\hspace{1mm} \{N,\}]{L'élément précédent est matché au moins N fois}
\item[\hspace{1mm} \{,M\}]{L'élément précédent est matché au plus N fois}
\item[\hspace{1mm} \{N,M\}]{L'élément précédent est matché au moins N fois et au plus M fois.}
\end{description}
 
\vspace{1cm}{\huge Classes de caractère et expressions entre crochet }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} \texttt{[}:alnum:\texttt{]}]{Caractères alphanumériques =[0-9A-Za-z]}
\item[\hspace{1mm} \texttt{[}:alpha:\texttt{]}]{Caractère alphabétiques [A-Za-z]}
\item[\hspace{1mm} \texttt{[}:blank:\texttt{]}]{Caractères blancs: espace et tabulation}
\item[\hspace{1mm} \texttt{[}:cntrl:\texttt{]}]{Caractères de contrôle}
\item[\hspace{1mm} \texttt{[}:digit:\texttt{]}]{Chiffres [0-9]}
\item[\hspace{1mm} \texttt{[}:graph:\texttt{]}]{Caractères graphiques: [:alnum:] et [:punct:]}
\item[\hspace{1mm} \texttt{[}:print:\texttt{]}]{Caractères imprimables. [:alnum:], [:punct:], et espace}
\item[\hspace{1mm} \texttt{[}:punct:\texttt{]}]{caractères de ponctuation ‘! " \# \$ \% \& ' ( ) * + , - . / : ; < = > ? @ [ \textbackslash{} ] \textasciicircum \_ ` \verb|{| | \verb|}| \textasciitilde’}
\item[\hspace{1mm} \texttt{[}:space:\texttt{]}]{Caractères espace}
\item[\hspace{1mm} \texttt{[}:lower:\texttt{]}]{caractères minuscules [a-z]}
\item[\hspace{1mm} \texttt{[}:upper:\texttt{]}]{Caractères majuscules [A-Z]}
\item[\hspace{1mm} \texttt{[}:xdigit:\texttt{]}]{Chiffres hexadécimaux [0-9A-Fa-f]}
\end{description}
 
\hspace{1mm}  La plupart des méta-caractères perdent leur signification spéciale dans les expressions entre crochet.
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} \texttt{]}]{Termine une expression crochet si ce n'est pas le premier élément de la liste}
\item[\hspace{1mm} \texttt{[}.]{Représente le symbole d'ouverture de regroupement.}
\item[\hspace{1mm} .\texttt{]}]{Représente le symbole de fermeture de regroupement}
\item[\hspace{1mm} \texttt{[}=]{Représente l'ouvertuse de classe équivalente}
\item[\hspace{1mm} =\texttt{]}]{Représente la fermeture de classe équivalente}
\item[\hspace{1mm} \texttt{[}:]{Représente le symbole d'ouverture de classe de caractère}
\item[\hspace{1mm} :\texttt{]}]{Représente le symbole de fermueture de classe de caractère}
\item[\hspace{1mm} -]{Représente la plage si ce n'est pas le premier ou le dernier caractère}
\item[\hspace{1mm} \textasciicircum]{Représente les caractères qui ne sont pas dans la liste.}
\end{description}
 
\vspace{1cm}{\huge Le caractère \textbackslash{} et des expressions spéciales }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} \textbackslash{}b]{Matche la chaîne vide au bord d'un mot}
\item[\hspace{1mm} \textbackslash{}B]{Matche la chaîne vide qui n'est pas au bord d'un mot}
\item[\hspace{1mm} \textbackslash{}<]{Matche la chaîne vide au début d'un mot}
\item[\hspace{1mm} \textbackslash{}>]{Matche la chaîne vide à la fin d'un mot}
\item[\hspace{1mm} \textbackslash{}w]{Matche un constituant d'un mot, synomyme de [\_[:alnum:]]}
\item[\hspace{1mm} \textbackslash{}W]{Match un non-constituant de mot, synomyme de [\textasciicircum \_[:alnum:]]}
\item[\hspace{1mm} \textbackslash{}s]{Matche un espace blanc, synomyme de [[:space:]]}
\item[\hspace{1mm} \textbackslash{}S]{Matche un non-espace, synonyme de [\textasciicircum [:space:]]}
\end{description}
 
\vspace{1cm}{\huge ancre }
 
\
 
\hspace{1mm}  \textasciicircum et \$ sont des méta-caractères qui matchent respectivement la chaîne vide au début de ligne et la fin de ligne.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Références et sous-expressions }
 
\
 
\hspace{1mm}  Le back-reférence, \textbackslash{}N, où N est un simple chiffre, matche la sous-chaîne précédemment matchée par la N-ième sous-expression entre parenthèses de l'expression régulière. Par exemple, (a)\textbackslash{}1 matche 'aa'.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Expressions régulières basiques et étendues }
 
\
 
\hspace{1mm}  Dans les expressions régulières basiques, les méta-caractères '?', '+', ‘\{’, ‘|’, ‘(’, et ‘)’ perdent leur signification spéciales, utiliser leur versions échappées \textbackslash{}.
\vspace{5mm} \\
 
 
\hspace{1mm}  egrep ne supporte pas le méta-caractère \{ et certaines implémentations supportent \textbackslash{}\{, les scripts portables doivent éviter \{ dans les pattern grep -E, et utiliser [\{].
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Exemples }
 
\
 
\hspace{1mm} Lister simplement les noms des fichiers qui matchent \\
\hspace{1mm} \textbf{grep -l 'main' *.c} \\
\hspace{1mm} Rechercher récursivement \\
\hspace{1mm} \textbf{grep -r 'hello' /home/gigi} \\
\hspace{1mm} Rechercher seulement dans les fichiers C \\
\hspace{1mm} \textbf{find /home/gigi -name '*.c' -print0 | xargs -0r grep -H 'hello'} \\
\hspace{1mm} Similairement \\
\hspace{1mm} \textbf{grep -rH --include='*.c' 'hello' /home/gigi} \\
\hspace{1mm} Recherche toutes les lignes matchant --cut here-- \\
\hspace{1mm} \textbf{grep -e '--cut here--' *} \\
\hspace{1mm} Recherche seulement les instances de hello qui sont des mots entiers: \\
\hspace{1mm} \textbf{grep -w 'hello' *} \\
\hspace{1mm} Et ne matche pas Othello. Pour plus de contrôle, utilise \textbackslash{}< et \textbackslash{}> \\
\hspace{1mm} \textbf{grep 'hello\textbackslash{}>' *} \\
\hspace{1mm} Afficher le contexte autour des lignes qui matchent \\
\hspace{1mm} \textbf{grep -C 2 'hello' *} \\
\hspace{1mm} Forcer grep à afficher le nom d'un fichier \\
\hspace{1mm} \textbf{grep 'eli' /etc/passwd /dev/null} \\
\hspace{1mm} ou encore \\
\hspace{1mm} \textbf{grep -H 'eli' /etc/passwd} \\
\hspace{1mm} Rechercher sur l'entrée standard et dans les fichiers \\
\hspace{1mm} \textbf{cat /etc/passwd | grep 'alain' - /etc/motd} \\
\hspace{1mm} Comment exprimer des palindromes en expressions régulières \\
\hspace{1mm} \textbf{grep -w -e '\textbackslash{}(.\textbackslash{})\textbackslash{}(.\textbackslash{}).\textbackslash{}2\textbackslash{}1' file} \\
\end{flushleft}
\end{document}
