summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid A. Madore <david+git@madore.org>2016-12-09 13:44:14 +0100
committerDavid A. Madore <david+git@madore.org>2016-12-09 13:44:14 +0100
commit2b4d6434bf41db0befe832114c89f273276eb8d6 (patch)
treeb31429539fa462a41efdfc528708ec8003862f39
parentccdaf86369702d959779e9924bc5dfc6d20ee64f (diff)
downloadinf105-2b4d6434bf41db0befe832114c89f273276eb8d6.tar.gz
inf105-2b4d6434bf41db0befe832114c89f273276eb8d6.tar.bz2
inf105-2b4d6434bf41db0befe832114c89f273276eb8d6.zip
Test various egrep features.
-rw-r--r--tp1-files/liste29
-rw-r--r--tp1.tex60
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
diff --git a/tp1.tex b/tp1.tex
index fd19232..8a22749 100644
--- a/tp1.tex
+++ b/tp1.tex
@@ -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}
+
%
%