Verified Commit 329bf68c authored by Stephane Bonnet's avatar Stephane Bonnet
Browse files

grep, regex, file

parent 8696642b
Pipeline #33794 failed with stage
in 16 seconds
......@@ -385,7 +385,7 @@ $ locate issue
\begin{block}{}
\begin{description}
\item[\cmd{find}] recherche un fichier en parcourant l'arborescence
\item[\cmd{find}] recherche un fichier dans le système de fichiers.
\end{description}
\end{block}
......@@ -468,14 +468,144 @@ $ find . -name 'file_1*' -print
\subsection{Chercher à l'intérieur des fichiers}
\begin{frame}[fragile]{\cmd{grep}}
\begin{block}{}
\begin{description}
\item[\cmd{grep}] recherche un motif dans des fichiers
\end{description}
\end{block}
\begin{exampleblock}{Chercher tous les mots qui contiennent ``aard''}
\cmd{grep 'aard' /usr/share/dict/words}
\end{exampleblock}
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ grep 'aard' /usr/share/dict/words
Kierkeg\textcolor{red}{aard}
Kierkeg\textcolor{red}{aard}'s
\textcolor{red}{aard}vark
\textcolor{red}{aard}vark's
\textcolor{red}{aard}varks
\end{Verbatim}
\end{beamercolorbox}
\begin{block}{Remarques}
\begin{itemize}
\item{\cmd{grep} peut être utilisée récursivement:
option \cmd{-R}}
\item{\cmd{grep} sans argument, cherche le motif sur l'entrée
standard}
\end{itemize}
\end{block}
\end{frame}
\begin{frame}[fragile]{Expressions régulières}
\begin{frame}[fragile]{Expressions régulières (\emph{regex})}
\begin{block}{}
\begin{itemize}
\item Chaîne de caractères qui décrit précisément un ensemble
de chaînes de caractères possibles.
\item Dans les commandes qui utilisent un motif (comme \cmd{grep}), le motif est presque toujours une expression régulière.
\end{itemize}
\end{block}
\end{frame}
\begin{frame}[fragile]{Expressions régulières (\emph{regex})}
\framesubtitle{Bases}
\begin{itemize}
\item Décrit la suite de caractères qui doivent correspondre dans une chaîne.
\item Les alternatives sont séparées par une barre verticale: \cmd{a|b} reconnaît tout
mot contenant 'a' ou 'b'.
\item Les parenthèses regroupent les expressions:
\begin{itemize}
\item \cmd{ab|cd} reconnaît tout mot contenant 'ab' ou 'cd'
\item \cmd{a(b|c)d} reconnaît tout mot contenant 'abd' ou 'acd'.
\end{itemize}
\end{itemize}
\begin{alertblock}{Attention aux caractères interprétés par le shell}
Les parenthèses et les barres verticales sont interprétées par le shell.
Il faut les échapper pour les utiliser dans des regex. Pour exploiter le motif
\cmd{a(b|c)d} avec grep, il faudra écrire:
\begin{center}
\cmd{grep 'a\textbackslash(b\textbackslash|c\textbackslash)d'}
\end{center}
\end{alertblock}
\end{frame}
\begin{frame}[fragile]{Expressions régulières (\emph{regex})}
\framesubtitle{Caractères}
Chaque caractère de la chaîne à reconnaître doit être spécifié, soit en donnant sa valeur
directement ou en donnant sa classe.
\begin{itemize}
\item \cmd{abcd} : la suite 'abcd'.
\item \cmd{[ab]bcd} : soit a, soit b suivi de bcd. Les crochets définissent une
classe de caractères acceptables pour un caractère donné.
\item \cmd{[a-z]bcd} : on peut utiliser des intervalles dans les classes.
\item \cmd{a.b} : trois caractères commençant par a et finissant par b.
Le point correspond à n'importe quel caractère.
\item \cmd{[:alnum:]} : tout caractère alphanumérique
\item \cmd{[:digit:]} : tout chiffre
\item \cmd{[:space:]} : tout espace
\end{itemize}
\end{frame}
\begin{frame}[fragile]{Expressions régulières (\emph{regex})}
\framesubtitle{Quantificateurs et prédicats}
Il représentent le nombre de répétitions d'une expression et ajoutent des contraintes sur
sa position dans la chaîne.
\begin{itemize}
\item \cmd{expr*} : le motif \cmd{expr} répété 0 ou plusieurs fois.
\item \cmd{expr+} : le motif \cmd{expr} répété 1 ou plusieurs fois.
\item \cmd{expr?} : le motif \cmd{expr} répété 0 ou une fois.
\item \verb+^expr+ : le motif \cmd{expr} en début de ligne.
\item \cmd{expr\$} : le motif \cmd{expr} en fin de ligne.
\end{itemize}
\end{frame}
\begin{frame}[fragile]{\cmd{grep} et expressions régulières}
\begin{exampleblock}{Trouver tous les mots commençant par ab}
\verb+grep '^ab' /usr/share/dict/words+
\end{exampleblock}
\begin{exampleblock}{Trouver tous les mots de quatre lettres commençant par g et finissant par t}
\verb+grep '^g..t$' /usr/share/dict/words+
\end{exampleblock}
\begin{exampleblock}{Trouver tous les mots commençant par g et finissant par t}
\verb,grep '^g.\+t$' /usr/share/dict/words,
\end{exampleblock}
\begin{alertblock}{C'est très pratique...}
...pour les mots croisés!
\end{alertblock}
\end{frame}
\subsection{Identifier des fichiers}
\begin{frame}[fragile]{\cmd{file}}
\begin{block}{}
\begin{description}
\item[\cmd{file}] identifie la nature des données d'un fichier.
\end{description}
\end{block}
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ file /usr/lib/libreoffice/program/intro.png
/usr/lib/libreoffice/program/intro.png: PNG image data, 661 x 169, 8-bit/color RGBA, interlaced
$ file /bin/bash
/bin/bash: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked,
interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0,
BuildID[sha1]=b636f50d85c3cca7cf2518030446660c1d90d660, stripped
\end{Verbatim}
\end{beamercolorbox}
\begin{block}{Remarque}
\cmd{file} fonctionne en analysant réellement le contenu du fichier, il ne se sert pas de
l'extension.
\end{block}
\end{frame}
\subsection{Manipuler des fichiers}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment