diff options
author | David A. Madore <david+git@madore.org> | 2016-12-09 13:44:14 +0100 |
---|---|---|
committer | David A. Madore <david+git@madore.org> | 2016-12-09 13:44:14 +0100 |
commit | 2b4d6434bf41db0befe832114c89f273276eb8d6 (patch) | |
tree | b31429539fa462a41efdfc528708ec8003862f39 | |
parent | ccdaf86369702d959779e9924bc5dfc6d20ee64f (diff) | |
download | inf105-2b4d6434bf41db0befe832114c89f273276eb8d6.tar.gz inf105-2b4d6434bf41db0befe832114c89f273276eb8d6.tar.bz2 inf105-2b4d6434bf41db0befe832114c89f273276eb8d6.zip |
Test various egrep features.
-rw-r--r-- | tp1-files/liste2 | 9 | ||||
-rw-r--r-- | tp1.tex | 60 |
2 files changed, 69 insertions, 0 deletions
diff --git a/tp1-files/liste2 b/tp1-files/liste2 new file mode 100644 index 0000000..c47b811 --- /dev/null +++ b/tp1-files/liste2 @@ -0,0 +1,9 @@ +* +* * +* * * +alcatraz +aujourd'hui +*coucou* +regexp +toto +turlututu chapeau pointu @@ -133,6 +133,10 @@ renvoie les lignes de \texttt{monfichier} qui commencent par \texttt{x} (en début de ligne) suivi d'un nombre quelconque de \texttt{y} et d'un \texttt{z} (en fin de ligne). +% +% +% + \exercice Le fichier \texttt{\char"7Emadore/inf105/liste1} contient 25 mots sur @@ -181,6 +185,62 @@ modulo $3$ ? renvoie $11$. \end{corrige} +% +% +% + +\exercice + +Le fichier \texttt{\char"7Emadore/inf105/liste2} contient des mots +(tous distincts) sur l'alphabet ASCII ; ces lignes peuvent contenir, +notamment, des espaces et des caractères spéciaux pour \texttt{egrep}. + +(a) Combien de lignes ne contiennent que des lettres de l'alphabet +latin (de A à Z sans diacritiques, majuscules comme minuscules) ? (On +rappelle pour cela la syntaxe « \texttt{[abc]} » d'\texttt{egrep} qui +permet de désigner un caractère parmi \texttt{a}, \texttt{b} et +\texttt{c} (c'est donc synonyme de \texttt{(a|b|c)} mais uniquement +pour des caractères individuels) et « \texttt{[a-f]} » qui désigne un +caractère entre \texttt{a} et \texttt{f}.) Combien de lignes +contiennent un caractère autre que les lettres de l'alphabet latin ? +(On rappelle que « \texttt{[\char"5Ea-f]} » permet de désigne un +caractère n'appartenant pas à l'intervalle entre \texttt{a} et +\texttt{f}.) + +(b) Combien de lignes commencent par un \texttt{a} et finissent par un +\texttt{z} ? (On rappelle pour cela la syntaxe « \texttt{.} » +d'\texttt{egrep} qui permet de désigner un caractère quelconque.) + +(c) Combien de lignes contiennent une astérisque ? (On rappelle qu'on +peut « échapper » un caractère spécial pour \texttt{egrep} en le +faisant précéder d'un backslash (\texttt{\char"5C}).) Au moins deux +astérisques ? Exactement deux astérisques ? + +(d) Combien de lignes contiennent exactement six caractères ? (On +rappelle les syntaxes « \texttt{$r$\{$n$\}} » et +« \texttt{$r$\{$m$,$n$\}} » et « \texttt{$r$\{$m$,\}} » et +« \texttt{$r$\{,$n$\}} » pour chercher respectivement exactement $n$, +entre $m$ et $n$, au moins $m$, et au plus $n$ occurrences de +l'expression régulière $r$.) Entre quatre et huit caractères ? Au +moins trois fois le caractère \texttt{u} ? Exactement six fois le +caractère \texttt{u} ? + +\begin{corrige} +(a) \verb=egrep -c '^[A-Za-z]*$'= pour uniquement des lettres, et + \verb='[^A-Za-z]'= pour un caractère qui n'est pas une lettre. + +(b) \verb=egrep -c '^a.*z$= + +(c) \verb=egrep -c '\*'= pour une astérisque, \verb='\*.*\*'= pour au + moins deux, et \verb='[^*]*\*[^*]*\*[^*]*'= pour exactement deux + astérisques. + +(d) \verb=egrep -c '^.{6}$'= pour exactement six caractères, + \verb='^.{4,8}$'= pour entre quatre et huit caractères, + \verb='(u.*){3,}'= pour au moins trois fois \texttt{u}, et + \verb='^[^u]*(u[^u]*){6}$'= pour exactement six \texttt{u}. +\end{corrige} + % % |