5.4 Expressions régulières
-
3 spécifications différentes :
-
Shell
- Commandes
sed
``stream editor''
- Manière synthétique de représenter un ensemble de chaînes
de caractères
-
Chaînes normales
- Méta-caractères
Syntaxe shells
-
Noms de fichiers
- Substitués par l'interpréteur
syntaxe |
sens |
abc |
cette chaîne |
? |
un caractère quelconque |
* |
des caractères |
[xyz] |
x ou y ou z |
[a-g] |
un caractère entre a et g |
[!xyz] |
un caractères sauf x, y
ou z |
Exemple de la syntaxe shells
% ls
File1 File2 File3
fichier prog1.c prog2.c
% echo File?
File1 File2 File3
% echo ?i*
File1 File2 File3 fichier
% echo *.c
prog1.c prog2.c
% echo *2*
File2 prog2.c
% echo [!Ff]*
prog1.c prog2.c
Recherche de fichiers
find dir expr command
-
Recherche dans une arborescence
- Des fichiers satisfaisant
expr
- Application de
command
dir
racine de l'arborescence
expr
-
( ) -o -a
opérateurs logiques
- name reg-expr-shell
- -user name
- -size n
-size +n taille n × 512 octets
-size -n
- -atime n
- Autre possibilitées :
man 1 find
command
-
-print
affiche le nom du fichier
- -exec unix-cmd
Le nom du fichier : {}
-
Exemple : les fichiers
.c
de plus de 40 Ko
% find . -name '*.c' -size +80 -print
./pvm3/src/lpvm.c
./pvm3/src/pvmd.c
- Exemple : mes fichiers
% find / -user $USER -print
- Exemple : nettoyage
% find $HOME \( -name a.out -o -name '*.o' \) \
-atime +7 -exec rm {} \;
Expressions régulières de commandes
-
Expressions régulières par ligne
- Commandes
grep sed awk expr
syntaxe |
sens |
c |
caractère ordinaire |
. (dot) |
un caractère quelconque |
[xyz] |
x ou y ou z |
[A-G] |
interval |
[^xyz] |
sauf x, y ou z |
^ |
début de ligne |
$ |
fin de ligne |
* |
opérateur de répétition (³ 0) |
\{ m,n\} |
répétions entre m et
n fois |
\ |
échappement |
Exemples d'expressions régulières
-
^$
: lignes vides
- mot : lignes contenant mot
^[A-Z]
[a-z][a-z]$
[ABCD]\{2,10\}$
[^:][^:]*:*$
Recherche de motifs dans un fichier grep
grep [-vin] regexpr [file]...
-
Cherche et affiche les lignes contenant regexpr
- Options
-
-v : complémentaire
- -i : maj. et min. indifférentes
- -n : affiche les numéros de lignes
$ ps aux | grep "^marquet"
marquet 14551 ... 0:10 ghostview poly.ps
marquet 15818 ... 0:02 gs -dQUIET -dNOPAUSE -
marquet 13883 ... 0:05 -tcsh (tcsh)
Calcul d'expressions expr
expr argument...
-
Calcule la valeur d'une expression
- Expressions booléennes :
= != > < >= <=
expr 45 != 20
- Expresions arithmétiques : + - * / %
expr 2 + 1
- Opérateur « : » : expr string : reg-expr
Renvoie le nombre de caractères reconnus
(0 si non correspondance)
Editeur sed
sed [-n] [-e script ] [file]...
-
``stream editor''
- Langage de manipulation de chaînes de caractères
- Manipulation ligne par ligne (pattern space)
- Commandes exécutées sur chaque ligne
a
append, d
delete, p
print, s
substitute...
- Application contextuelle des commandes
Numéros de lignes
Dernière ligne ($
)
Expression régulière
- Option
-n
: no output
Règles de sed
[address [,address]] function [arg]...
-
address
:
-
Numéro de ligne
$
pour la dernière ligne
- Expression régulière
address, address
: intervalle concerné
function
: une lettre abcdDgGHilnNpPqrstwy
Un premier exemple de sed
% cat test-sed
marquet 7333 Philippe Marquet
albert 7507 Francis Albert
podvin 7509 Maurice Podvin
duchmol 7713 Pierre Duchmol
% sed -n -e 2,3p < test-sed
albert 7507 Francis Albert
podvin 7509 Maurice Podvin
% sed -e s/Pierre/Peter/ < test-sed
marquet 7333 Philippe Marquet
albert 7507 Francis Albert
podvin 7509 Maurice Podvin
duchmol 7713 Peter Duchmol
Les commandes de sed
-
a\
: (append) ajoute du texte
c\
: (change) remplace la ligne
i\
: (insert)
- d : (delete)
- w file : écrit la ligne dans file
- p : (print) envoie sur stdout
- n : ligne suivante (-f)
- q : (quit)
- y/str1/str2/ : (yank), même longueur
Fichier de commandes sed
-
Option -f file :
file contient des commandes de sed
% cat prog.sed
1a\
albert 7507 Francis Albert
% cat test-sed
marquet 7333 Philippe Marquet
podvin 7509 Maurice Podvin
duchmol 7713 Pierre Duchmol
% sed -f prog.sed < test-sed
marquet 7333 Philippe Marquet
albert 7507 Francis Albert
podvin 7509 Maurice Podvin
duchmol 7713 Pierre Duchmol
Les commandes de sed
-
b label et : label : branch !
- ! : not, complémentaire des adresses
- Hold space : une ligne sous le coude !
- Commandes :
-
g hold ® pattern
- G idem mais ajoute
- h pattern ® hold
- H idem mais ajoute
Exemple hold space
s/reg-expr/replacement/flags
-
s : (subsitute) commande la plus importante...
- Extension expression régulière en sed :
-
Stockage
\(
reg-expr\)
- Rappel :
\1 \2 \3
- Flags :
-
p : print
- g : global (plusieurs substitution par ligne)
- n Î [1-512] : occurrence à substituer
- w file : si oui écrire dans le fichier
-
Exemple sed s : options de substitution
% cat > f
aaa bbb aaa bbb aaa
aaa ccc
% sed -e 's/aaa/AAA/' < f
AAA bbb aaa bbb aaa
AAA ccc
% sed -e 's/aaa/AAA/g' < f
AAA bbb AAA bbb AAA
AAA ccc
% sed -e 's/aaa/AAA/g3' < f
aaa bbb aaa bbb AAA
aaa ccc
- Exemple sed s : inversion des champs 1 et 2
% cat > f
marquet:philippe:7713
duchmol:pierre:7333
albert::francis
% sed -e 's/^\([^:]*\):\([^:]*\)/\2:\1/' < f
philippe:marquet:7713
pierre:duchmol:7333
:albert:francis
% echo '\$[] !' | sed -e 's/\\\$\[]/ouff/'
ouff !
Grand est sed
-
head
º sed -n -e 1,10p º sed -e 10q
- cut -d: -f1
º sed -n -e 's/^\([^:]*\):.*$/\1/p'
- etc.
Il y a mieux (pire) : awk