spell
, il est souhaitable de ne pas faire
passer les commandes avec, sous peine d'obtenir une avalanche de mots
inconnus de spell
.
On cherche donc à faire (en Perl) un filtre list
qui
puisse extraire certaines lignes du fichier.
On spécifie les lignes à extraire en activant le filtre par un
mot-clef avant, et en le désactivant par un autre mot-clef.
On décide que ces mots-clef soient respectivement
"filter list on
" et "filter list off
".
Par exemple, si le fichier toto
contient
#! /bin/sh if [ $# != 1 ] then echo "un seul argument svp" exit 1 fi cat >> $1 <<END # filter list on Perl is a language optimized for scanning arbitrary text files, extracting information from those text files, and printing reports based on that information. It's also a good language for many system management tasks. The language is intended to be practical (easy to use, efficient, complete) rather than beautiful (tiny, elegant, minimal). END # filter list off exit 0la commande
list toto
donne en sortie standard
Perl is a language optimized for scanning arbitrary text files, extracting information from those text files, and printing reports based on that information. It's also a good language for many system management tasks. The language is intended to be practical (easy to use, efficient, complete) rather than beautiful (tiny, elegant, minimal). ENDet l'on peut faire
list toto | spell
.
accent
qui convertie les différents
formats de caractères accentués.
Par exemple,
accent tex <file1> iso <file2>
<file2>
le fichier <file1>
en remplaçant "\'e
" par "é
", ...
Voici une liste des substitutions à faire.
tex | iso | epelle | html |
\'e | é | e' | é |
\`e | è | e` | è |
\^e | ê | e^ | ê |
\`a | à | a` | à |
\^a | â | a^ | â |
\^o | ô | o^ | ô |
\`u | ù | u` | ù |
\"u | ü | u" | ü |
\^{\i} | î | i^ | î |
\"{\i} | ï | i" | ï |
\c{c} | ç | c, | ç |
{\oe} | oe | oe | oe |
{\ae} | æ | ae | æ |
split
telle que
split totoeffectue les instructions suivantes.
toto
, et le parcours ligne-par-ligne
jusqu'à trouver le mot-clef "split control parameters
".
split control
parameters<delimiter><commands><delimiter><end of line>
<delimiter>
est un caractère quelconque
utilisé comme délimiteur, <commands>
est
une chaîne de caractères (éventuellement avec des sauts
à la ligne) ne contenant pas le délimiteur, et
end of line>
est la fin de la ligne qui contient le
délimiteur.
<commands>
est
interprétée comme une suite de chaînes de caractères
(séparés par des espaces ou des passages à la ligne).
Chaque chaîne représente une commande.
ignore <str>
Dans la suite de la liste <commands>
, ignore les
chaînes égales à <str>
.
thisfile <character>
Dans la suite de la liste <commands>
, remplace dans les
noms de fichier les occurrences du caractère
<character>
par le nom du fichier traité.
keyword <keyword> <file>
Crée un mot-clef <keyword>
associé au nom
de fichier <file>
(éventuellement substitué).
default <keyword1> [<keyword2> [...]]
Recopie les premières lignes du fichier, ainsi que les suivantes
(jusu'aux prochains mots-clef) dans la liste des fichiers correspondant aux
mots-clefs suivant.
(Cette commande doit être la dernière.)
exo1
contient
#! /bin/perl # split control parameters"ignore # # thisfile @ # keyword split_ignore /dev/null # keyword split_exo_fr @_fr.html # keyword split_cor @_cor # keyword split_exo_en @_en.html # default split_cor # " while ($line=<>) { print $line; } exit 0; # split_exo_fr split_exo_en <html><head></head><body> # split_exo_fr Faire un filtre analogue à <code>cat</code> qui recopie l'entrée standard dans la sortie standard. </body></html> # split_exo_en Write a Perl filter which as <code>cat</code> copies the standard input into the standard output. # split_exo_fr split_exo_en </body></html>la commande va créer trois fichiers:
exo1_fr.html
, exo1_en.html
et
exo1_cor
.
A la fin, exo1_fr.html
contientdra
<html><head></head><body> Faire un filtre analogue à <code>cat</code> qui recopie l'entrée standard dans la sortie standard. </body></html>
exo1_en.html
contientdra
<html><head></head><body> Write a Perl filter which as <code>cat</code> copies the standard input into the standard output. </body></html>et
exo1_cor
contientdra
#! /bin/perl while ($line=<>) { print $line; } exit 0;[corrigé] [solution de JB]