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