Vous êtes sur la page 1sur 52

Outils de manipulation de

texte
Réalisé par:
Maha SABKI
Sommaire:
 Les expressions régulières:
 Conventions d’écriture
 Les expressions régulières atomiques: era
 La construction d’une expression régulière
 Combinaison d’expression régulière
 D’autres expressions régulières atomiques
 Les expressions régulières de base
 La commande grep:
 Les caractères spéciaux dans les expressions régulières
 La commande sed:
 La commande d’édition de sed
 Quelques commandes d’édition
 La commande awk:
 Caractéristiques du langage
 La ligne de commande awk
 Le programme awk
 La commande tr
 Les expressions
régulières
DÉFINITION:

Une expression régulière (en anglais Regular


Expression ou RE) sert à identifier une chaîne de
caractère répondant à un certain critère (par
exemple chaîne contenant des lettres minuscules
uniquement).
L'avantage d'une expression régulière est qu'avec
une seule commande on peut réaliser un grand
nombre de tâche qui seraient fastidieuses à faire
avec des commandes UNIX classiques.
Exemples:

Rechercher toutes les chaînes de caractères alphabétiques dans :


● le fichier fich1.f
● tous les fichiers dont les noms se terminent par .f
● tous les fichiers dont les noms commencent par une majuscule et
se terminent
par .f

xstra> grep ’[a zA Z]’ fich1.f


xstra> grep ’[a zA Z]’ *.f
xstra> grep ’[a zA Z]’ [A Z]*.f
↑ ↑
§ expression régulière génération de noms de fichier
 Convention d’écriture:

Dans ce chapitre, on dira qu’une chaîne de caractères vérifie une


expression régulière (l’aide en ligne utilise le terme : match), et
le terme caractère exclut le caractère
<new-line>.
● ch désigne un caractère quelconque sauf un caractère spécial
● sp désigne un caractère spécial
Les caractères spéciaux pour les expressions régulières sont les
suivants :
| . * + ? ^ $ ( ) [ ] {} \
Les expressions régulières sont construites progressivement, à
partir de briques de base appelées expressions régulières
atomiques.
 Les expressions régulières atomiques: era

On appelle expression régulière atomique (era) un motif constitué d’un seul carac-
tère appartenant à un ensemble précis.

Cette era définit l’ensemble de caractères suivants


ch l’ensemble constitué du seul caractère ch
\sp l’ensemble constitué du seul caractère spécial sp
. l’ensemble de tous les caractères
[gkl] l’ensemble constitué des caractères placés entre [](g,k,l)
[^gkl] l’ensemble constitué des caractère autres que g,k,l. Le caractère
^ placé après [ indique la négation].
[a-z] l’ensemble constitué des caractères compris entre a et z (ordre
alphabétique)
[^a-z] l’ensemble constitué des caractères non compris entre a et z
 La construction d’une expression régulière : er

Si l’on recherche une chaîne de caractères conforme à un certain


motif, il
faut pouvoir définir l’ensemble des caractères constituant ce
« mot » , le nombre de
caractères dans ce mot, et à quel endroit le chercher (quoi ?
combien ? où ?) .
Par exemple : un mot de 3 à 6 lettres minuscules au début de la
ligne. Les briques
élémentaires (era) définissent des ensembles de caractères (quoi ?)
et seront combi-
nées entre elles par trois opérations élémentaires : la
concaténation, la quantification
(combien ?) et l’ancrage (où ?).
• La concaténation:
Une expression régulière (er) peut être obtenue par
concaténation (juxtaposition) d’expressions régulières atomiques
(era). La concaténation est décrite sans opérateur ou caractère
spécial

Exemples:
abc § la chaîne abc
[Oo]ui § la chaîne Oui ou la chaîne oui
[A Z][0 9].. § une majuscule suivie d'un chiffre suivi de deux
caractères quelconques :
§ A8b5 ou Z444 mais pas h7fu
[a z][0 9].\. § une minuscule suivie d'un chiffre suivi
§ d'un caractère quelconque suivi d'un
§ point : a8b. ou h6.. mais pas Z67f
• La quantification:
Les quantifieurs permettent de définir combien de fois l’era qui
précède est
répétée. Si ⊗ désigne une expression régulière atomique les
quantifieurs utilisables
sont les suivants :
Quantifieur Signification
⊗* tout mot de 0 à N caractères vérifiant ⊗
⊗+ tout mot de 1 à N caractères vérifiant ⊗
⊗? tout mot de 0 à 1 caractère vérifiant ⊗
⊗{n} tout mot de n caractères vérifiant ⊗
⊗{n1,n2} tout mot de n1 à n2 caractères vérifiant ⊗
⊗{n1,} tout mot d’au moins n1 caractères vérifiant ⊗
⊗{,n2} tout mot de 0 à n2 caractères vérifiant ⊗
Exemples:

abc § la chaîne abc


a\. § la chaîne a.
a. § a suivi de n’importe quel caractère
a* § rien ou a ou aa ou aaa ou ...
a.* § a suivi de n’importe quelle chaîne (même vide)
§ (a ou ab ou abc ...)
a+ § a ou aa ou aa ou aaa ou ...
a? § rien ou a
a{2} § la chaîne aa
[a b]{2} § aa ou ab ou bb ou ba
• L’ancrage:
Deux caractères spéciaux servent à préciser la position de la
chaîne recherchée dans
la ligne :
^ désigne le début de la ligne (s’il est placé au début de
l’expression)
$ désigne la fin de la ligne (s’il est placé à la fin de
l’expression)

Exemples:
^linux § linux en début de ligne
linux$ § une ligne terminée par linux
^linux$ § une ligne ne contenant que linux
^$ § une ligne vide
 Combinaison d’expression régulière

Deux opérations permettent de


combiner entre elles des
expressions régulières :
l’alternative et le groupage.
• L’alternative:
Les expressions régulières permettent de désigner "ceci ou
cela" en séparant deux expressions régulières (er) par le
caractère | comme dans : "ceci|cela". Cette
combinaison est une nouvelle expression régulière.

Exemples:
linux|unix § le mot linux ou le mot unix
^linux|^unix § le mot linux ou le mot unix au début
[A Z]{8}|[0 9]{4} § 8 lettres majuscules ou 4 chiffres
• Le groupage:
Cette opération se fait par (…) et la notation W…
Mettre une expression régulière entre parenthèses ne change rien à cette
expression. Les parenthèses semblent inutiles. Cette notation offre cependant
deux possibilités :
● les quantifieurs peuvent s’appliquer à de telles expressions,
● la notation \N, où N est un nombre de 1 à 9, désigne la chaîne de caractères
qui a vérifié l’expression placée dans la Nème paire de parenthèses.

Exemples:
tsoin § tsoin et aucune autre chaîne
tsoin{2} § tsoinn et aucune autre chaîne : Le quantifieur {2} n’est appliqué
qu’au dernier n
(tsoin){2} § tsointsoin et aucune autre chaîne : Le quantifieur {2} est appliqué à
l’expression tsoin
(bla|tsoin){2} § blabla ou tsointsoin ou blatsoin ou tsoinbla
(bla|tsoin)\1 § blabla ou tsointsoin MAIS PAS blatsoin ni tsoinbla
Attention:
\0 désigne le caractère <null> et \N ne référence la nième paire de paren-
thèses que si elle existe.
Dans le groupage par (), la notation \N peut être complétée par * + ou ? avec
les significations habituelles :
● \1* signifie 0 à N fois la chaîne qui a vérifié le premier sous-motif
● \3+ signifie 1 à N fois la chaîne qui a vérifié le troisième sous-motif
● \2? signifie 0 ou 1 fois la chaîne qui a vérifié le deuxième sous-motif
Cette notation est appelée : référence arrière à une sous-chaîne (back-
reference to a sub-string). Elle permet de désigner une chaîne inconnue au
moment de l’écriture de l’expression, comme par exemple :
"une chaîne identique au premier mot de la ligne ".
 D’autres expressions régulières atomiques:

Il y a d’autres possibilités qui permettent de rendre les expressions régulières


atomiques plus complètes et utilisables avec des jeux de caractères autre que
l’ASCII US (en particulier avec des caractères accentués).
● plus complètes : comment désigner un caractère spécial,
● internationales : comment définir une classe de caractères indépendamment de
la langue locale.

Il est possible de désigner des caractères spéciaux de la façon suivante :


\0 le caractère <null>
\a le caractère <alert> (bell)
\b le caractère <backspace>
\f le caractère <form-feed>
\n le caractère <new-line>
\r le caractère <carriage-return>
\t le caractère <tab>
\v le caractère <vertical-tab>
\013 le caractère dont le code ASCII est 013 en octal
Les classes de caractères:
Les classes de caractères sont définies par la notation [:code:] et
ne peuvent être utilisées que dans la définition d’une liste de
caractères (era). La correspondance entre ces classes et les
éléments qui les composent sont donnés ici pour la langue
anglaise :
[[:alnum:]] un alphanumérique ([0-9a-zA-Z])
[[:alpha:]] un alphabétique ([a-zA-Z])
[[:cntrl:]] un caractère de contrôle ([\a\b\r\f\t\n\v])
[[:digit:]] un digit ([0-9])
[[:graph:]] un caractère autre qu’alphanumérique ou ponctuation
[[:lower:]] une lettre minuscule ([a-z])
[[:print:]] un caractère imprimable
[[:punct:]] un caractère de ponctuation
[[:space:]] un caractère d’espacement ([\t\r\n\f ])
[[:upper:]] une lettre majuscule ([A-Z])
[[:xdigit:]] un digit hexa ([0-9A-Fa-f])
Règles de construction des classes de
caractères personnalisées
ATTENTION:

Ne pas oublier [: et :] dans les classes :


[[:print:]] correct : un caractère imprimable
[^[:print:]] correct : un caractère non imprimable
[^:print:] incorrect
[:^print:] incorrect

[[:lower:][:digit:]] correct : une minuscule (y compris


accentuée) ou un chiffre. En anglais : [a-z0-9]
 Les expressions régulières de base:

Les expressions régulières de base,


considérées comme obsolètes sous linux,
ont une syntaxe différente : les
caractères ? + { }( ) | n’ont pas de
signification
spéciale. Il faut les précéder du
caractère \ pour qu’ils soient interprétés
comme
dans les expressions régulières étendues.
 LA COMMANDE GREP
Définition:

La commande grep est la plus simple. Elle permet de


rechercher dans un flot de texte les lignes qui vérifient
une expression régulière, et ne transmet sur sa sortie
standard que ces lignes. Le grep linux comporte trois modes
de fonctionnement
selon l’option :

grep -G utilise les expressions régulières de base défaut


grep -E utilise les expressions régulières étendues à préférer
grep -F recherche des chaînes littérales fgrep
Remarque:

Sous Linux, nous conseillons d’utiliser systématiquement la


commande grep E,ce qui permet l’utilisation des expressions
régulières étendues. La commande fgrep rend de grands services
pour chercher rapidement une chaîne contenant un point ou une
étoile. La commande grep sans option (équivalente à grep G) ne
devrait être utilisée que pour compatibilité avec d’anciens shell
scripts. L’option -i permet d’inhiber la différence
majuscules/minuscules dans la recherche et l’option -v signifie
"afficher toutes les lignes qui ne vérifient pas l’expression
régulière".
Exemple:
Le fichier prodct.f contient (entre autres) les lignes suivantes :
J J518+K
J J*5
paj 5*sqrt(alpha)
Les deux exemples suivants montrent la différence entre grep et
fgrep :
xstra> grep i 'j=j*5' *.f
§ ici j*5 est une expression régulière
prodct.f : J J518+K
prodct.f : paj 5*sqrt(alpha)
§ Attention la chaîne j j*5 ne vérifie pas l’expression régulière j j*5
xstra> fgrep i 'j=j*5' *.f
§ ici * est pris tel quel prodct.f : J J*5
xstra>
 Les caractères spéciaux dans les expressions régulières
Nous allons présenter ici l’interprétation des caractères spéciaux
dans une expression régulière sur une suite d’exemples simples
mettant en œuvre la commande grep.
Soit le fichier fichier source contenant les trois lignes suivantes :
ceci est un essai
message 1 arrive, continuons
fin de l’essai.

* : remplace zéro fois ou n fois le caractère qui le précède


Exemple
xstra> grep 'es*a' fichier_source
ceci est un essai
message 1 arrive, continuons
fin de l’essai.
xstra>
. :désigne un caractère quelconque.
Exemple
xstra> grep 'c.ci' fichier_source
ceci est un essai
xstra>

[...] :désigne un caractère quelconque appartenant à la liste donnée entre


crochets. Deux caractères séparés par un tiret (-) définissent une liste : [c g]
équivaut à [cdefg].
Exemple
Recherche de toutes les lignes contenant un caractère numérique.
xstra> grep '[0 9]' fichier_source
message 1 arrive, continuons
xstra>

^ :placé en début de motif, désigne le début de la ligne.


Exemple
xstra> grep '^c' fichier_source
ceci est un essai
xstra>
$ : placé en fin de motif, désigne la fin de la ligne.
Exemple
xstra> grep 'es*a.$' fichier_source
ceci est un essai
xstra>

[^...] :désigne une liste de caractères à exclure.


Exemple
Recherche de toutes les lignes contenant autre chose que <espace> et chaînes
alphabétiques en minuscule.
xstra> grep '[^ a z]' fichier_source
message 1 arrive, continuons
fin de l’essai.
xstra>
Génération de noms de fichier Expressions régulières
? un caractère quelconque, sauf <new- remplace zéro ou une fois le
line> caractère qui précède
. le caractère point un caractère quelconque
sauf <new-line>
* zéro ou un nombre quelconque de remplace zéro fois ou n fois
caractères le caractère qui précède
[a-i] un caractère entre a et i un caractère entre a et i
[!a-i] un caractère qui n’est pas entre a et i un caractère entre a et i, ou !
[^a-i] un caractère entre a et i, ou ^ un caractère qui n’est pas
entre a et i
\ banalise le caractère qui suit banalise le caractère qui suit
^ le caractère ^ ce qui suit est en début de
ligne
$ référence une variable ce qui précède est en fin de
ligne

SYNTHÈSE DES DIFFÉRENCES D’INTERPRÉTATION DES CARACTÈRES SPÉCIAUX .


 La commande sed
Définition:

sed est éditeur ligne non interactif, il lit les lignes d'un fichier une
à une (ou provenant de l'entrée standard) leur applique un
certain nombre de commandes d'édition et renvoie les lignes
résultantes sur la sortie standard. Il ne modifie pas le fichier traité,
il écrit tout sur la sortie standard.
La syntaxe de sed est la suivante:
sed -e 'programme sed' fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter

L'option -n supprime la sortie standard par défaut, sed va écrire


uniquement les lignes concernées par le traitement (sinon il écrit
tout même les lignes non traitées). L'option -e n'est pas
nécessaire quand vous avez une seule fonction d'édition.
 La commande d’édition de sed:

La commande d’édition de sed (commandes sed) est de la


forme :
[adresse_debut [, adresse_fin] ] fonction [arguments]

Les adresses peuvent avoir la forme suivante :


● une valeur numérique désignant le numéro de la ligne dans le
fichier
● /motif/ désignant la première ligne contenant motif
● $ désignant la dernière ligne.
 Quelques commandes d’édition:

 Impression des lignes n à m : la


fonction p

xstra> sed n ’n,mp’ fichier_source

Affichage à l’écran des lignes n à m du fichier fichier


source, du fait de la fonction p(print).
 Impression sur critère

xstra> sed n’/motif_début/,/motif_fin/p’ fichier_source

Affichage à l’écran des lignes du fichier fichier source,


lignes comprises entre la première ligne contenant la
chaîne de caractères motif début et la première ligne
contenant la chaîne motif fin.
 Substitution d’une chaîne de
caractères par une autre : la fonction s

xstra> sed ’s/ancien_motif/nouveau_motif/g’ fichier_source

Affichage à l’écran du fichier fichier source. Les lignes contenant


la chaîne de caractères ancien motif seront affichées après
substitution d’ancien motif par nouveau motif, et ceci pour toutes
les occurrences d’ancien motif ; cela est dû au modifieur g qui
signifie global. Sans le modifieur g, la substitution n’est faite que
pour la première occurrence de ancien motif pour chaque ligne.
La commande sed est une commande très riche, pour plus de détails faites un man
sed et/ou man ed
 La commande awk
Définition:

awk est une commande très puissante, c'est un langage de


programmation a elle tout seule qui permet une recherche de
chaînes et l'exécution d'actions sur les lignes sélectionnées.
Elle est utile pour récupérer de l'information, générer des
rapports, transformer des données entre autres.

La syntaxe de awk est la suivante:


awk [ Fd] 'programme_awk' [fichiers]
ou
awk [ Fd] f fichier_awk [fichiers]
 Caractéristiques du langage:
 awk supporte des opérateurs arithmétiques et de manipulation
de chaînes
 awk supporte les expressions régulières étendues
 La boucle sur les lignes d’entrée est implicite
 Les variables awk sont non déclarées et non typées, normales
ou spéciales
Les variables spéciales : numéro de ligne, nombre de champs,
longueur, nom du fichier, etc. existent toujours et sont mises à
jour automatiquement au cours de l’exécution.
L’utilisateur peut définir des variables : elles sont simultanément
de type chaîne et numérique, le contexte d’utilisation déterminant
automatiquement la conversion appliquée par awk. De plus, ces
variables sont créées et initialisées automatiquement à zéro (ou à
la chaîne vide) dès leur première apparition dans le programme
awk.
 La ligne de commande awk:

Deux cas peuvent se présenter : soit le programme awk est


suffisamment court pour être placé entre apostrophes sur
la ligne de commandes, soit il est plus long et enregistré
dans un fichier dont le nom est passé à la commande awk
avec l’option -f.
L’option -Fd permet de fixer le séparateur de champs au
caractère d.

Important
Le programme awk est placé entre apostrophes simples,
car il comporte presque toujours des caractères susceptibles
d’être interprétés par le shell.
 Le programme awk:

Un programme awk est une suite de lignes du type :


condition { action }
Le champ condition ou le champ action peut être omis.
Un champ condition manquant est vérifié par toute ligne
d’entrée.
Un champ action manquant sort toute ligne qui vérifie
condition.
Exemple
xstra> awk ’$1 == 5 {print $2}’ fich1
§ condition : si le premier champ vaut 5
§ action : sortir le deuxième champ
• Le champ condition
Le champ condition peut être soit une condition de base, soit une condition composée.
Les conditions de base sont les suivantes :

Condition À quel moment l’action correspondante est appliquée


BEGIN Avant lecture de la première ligne d’entrée.
END Après lecture de la dernière ligne d’entrée.
expr À toute ligne d’entrée pour laquelle l’expression expr est
vraie, c’est à dire différente de zéro ou non vide
/er/ À toute ligne d’entrée contenant une chaîne vérifiant
l’expression régulière er.
expr ~/er/ À toute ligne d’entrée pour laquelle la valeur alphanumérique
de expr contient une chaîne vérifiant l’expression régulière
er.
expr !~/er/ À toute ligne d’entrée pour laquelle la valeur alphanumérique
de expr ne contient pas une chaîne vérifiant l’expression
régulière er.
Les conditions de base, sauf BEGIN et END, peuvent être
composées entre elles
selon les combinaisons suivantes :
Condition À quel moment l’action correspondante est
appliquée
cond1 && À toute ligne d’entrée vérifiant cond1 et cond2.
cond2
cond1 || À toute ligne d’entrée vérifiant cond1 ou cond2.
cond2
!cond À toute ligne d’entrée ne vérifiant pas cond.
cond1, À toute ligne d’entrée à partir de la première
cond2 ligne vérifiant cond1 et jusqu’à la prochaine
ligne vérifiant cond2 (incluses).
Les variables prédéfinies:

Nom de variable Contenu


FILENAME Nom du fichier d’entrée courant
FNR Numéro de ligne dans le fichier d’entrée courant
FS Séparateur de champs en entrée
IGNORECASE Si différent de 0, ne jamais faire de différence entre
majuscule et minuscule
NF Nombre de champs dans la ligne courante
NR Numéro de ligne dans le flot d’entrée
OFS Séparateur de champs en sortie
ORS Séparateur de lignes en sortie
RS Séparateur de lignes en entrée
$0 Ligne d’entrée courante
$1,$2,...,$NF 1er, 2ème, ..., dernier champ de la ligne d’entrée
Courante
Les expressions:
Les expressions dont il est question ici ne doivent pas être
confondues avec des expressions régulières. Il s’agit d’expressions
composées à partir de variables et d’opérateurs, et que awk peut
évaluer numériquement ou sous forme de chaîne selon le contexte.
Toute expression peut également être considérée comme un
booléen, la valeur vrai signifiant différent de zéro dans un
contexte numérique et non vide dans un contexte de chaîne.
Exemples:
Expression Signification
$1+$3 La somme des 1er et 3ème champs.
NF > 5 Vrai si le nombre de champs est supérieur à 5.
$4 == "" Vrai si le 4ème champ est vide.
($1+$2)/NF La somme des 1er et 2ème champs divisée par le
nombre de champs.
$7 ~/ksh/ Vrai si le 7ème champ contient la chaîne ksh.
Les opérateurs de comparaison:

Opérat Signification Exemples numériques et / ou


eur lexicographiques
== Egal à 1 est égal à 1 et linux est égal à
linux
!= Différent de linux est différent de DOS
> Supérieur à linux est supérieur à dos
< Inférieur à dos est inférieur à dosread
>= Supérieur ou égal à
<= Inférieur ou égal à
~ Vérifie l’ere /usr/bin/ksh vérifie /ksh/
!~ Ne vérifie PAS /home/yannick ne vérifie pas /[0-
l’ere 9]+/
Les actions:

Les actions possibles sont celles d’un langage de programmation


conventionnel, et la syntaxe est voisine de celle du langage C.
Très brièvement, les actions possibles sont des combinaisons
de :
● affectation de variables, incrémentation, décrémentation
● opérations arithmétiques dont un certain nombre de fonctions
prédéfinies telles que sin, cos, atan2, exp, log, sqrt, rand,..
● concaténation de chaînes (var1 var2)
● fonctions prédéfinies sur les chaînes telles que index, length,
split,match, sub, substr, sprintf,..
● opérations de sortie telles que print, printf, getline,.. avec
redirection possible vers un fichier ou un tube
● structures de contrôle telles que if, else, do, while, for,..
Une description complète de awk nécessiterait un livre entier, et le lecteur intéressé est invité à se référer au man de awk ou à un ouvrage plus
spécialisé.
 La commande tr
Définition:

La commande tr est un filtre strict : elle traite son entrée


standard et produit le résultat sur sa sortie standard. Cette
commande peut être utilisée sur des données non textuelles et
ne connaît pas les expressions régulières. Selon les options et
les paramètres qui lui sont passés, tr effectue trois types de
transformation sur le flot d’entrée :
● transcodage : tr sans option : tr string1 string2
● suppression de certains caractères : option -d : tr d string1
● suppression de répétitions : option -s : tr s string1
Transcodage:
Dans le transcodage, tr remplace chaque caractère du flot
d’entrée appartenant à la chaîne string1 par le caractère de
même rang dans la chaîne string2. Dans toutes les utilisations
de tr, la notation a z est autorisée pour représenter la suite des
caractères de a à z (inclus) et les caractères non imprimables
sont représentés par leur code ASCII en octal (\015 : le
caractère <carriage-return>.
Les exemples suivants montrent le transcodage :
# remplacer "a" par "A", "," par ";" et "/" par "_"
xstra> tr 'a,/' 'A;_' <fich1 >fich2
# remplacer $ par F, () par {} et <tab> par <espace>
# <tab> vaut 011 en octal
xstra> tr '$()\011' 'F{} ' <fich1 >fich2
# transformation majuscules vers minuscules
xstra> tr 'A Z' 'a z' <fich1 >fich2
Suppression de certains caractères:

Dans la suppression de certains caractères, tr supprime tout


caractère du flot d’entrée appartenant à la chaîne string1.

Voici un exemple très utile :


# supprimer les caractères <carriage return> et Ctrl Z
# ce qui convertit un fichier texte ASCII de
# DOS vers Unix
xstra> tr d '\015\032' <fich1 >fich2
Suppression de répétitions:
Dans la suppression de répétitions de certains caractères, tr
recherche dans le flot d’entrée toute séquence constituée de
plusieurs exemplaires consécutifs d’un caractère appartenant à
la chaîne string1 et remplace cette séquence par un seul
exemplaire du même caractère.

Voici quelques exemples :


# remplacer plusieurs espaces consécutifs par un seul
xstra> tr s ' ' <fich1 >fich2
# remplacer plusieurs <new line> consécutifs par un seul
xstra> tr s '\012' <fich1 >fich2
# ce qui peut se combiner comme ici pour les séquences
# de <espace> ou <tab> ou <new line>
xstra> tr s ' \011\012' <fich1 >fich2
FIN

Vous aimerez peut-être aussi