• Aucun résultat trouvé

Linux Les Filtres

N/A
N/A
Protected

Academic year: 2022

Partager "Linux Les Filtres"

Copied!
3
0
0

Texte intégral

(1)

Cours UNIX - Chapitre 5 - Filtres

Cours UNIX Cours UNIX Chapitre 5 Chapitre 5

Filtres Filtres

Les expressions rationnelles

Les expressions rationnelles (Regular Expressions) sont beaucoup utilisées sous UNIX, et notamment avec les outils d'éditions de texte et les filtres que nous allons voir dans ce chapitre, ainsi que dans nombre de langages de programmation (en particulier dans Javascript, Perl, PHP et Ruby).

Il s'agit d'un mécanisme qui permet de décrire des ensembles de caractères dans le cadre d'une recherche ou d'un remplacement de texte. Sans les expressions rationnelles, la manipulation de fichiers texte en ligne de commande ou par programmation est un véritable cauchemar.

Les expressions rationnelles sont extrêmement utiles sous UNIX, étant donné que tous les fichiers de configuration et de journalisation (logs) sont des fichiers texte.

Caractères spéciaux

Pour neutraliser un caractère spécial, le précéder du caractère \ (anti-slash).

[ ] définition d'un ensemble de caractères (voir ci-dessous)

^ deux significations:

– Début de ligne lorsqu'il est au début de l'expression rationnelle

– Complément (négation) de l'ensemble de caractères si il est juste après le caractère [

$ fin de ligne lorsqu'il est en fin d'expression rationnelle . désigne n'importe quel caractère

* remplace 0 ou n fois le caractère ou l'ensemble qui le précède.

+ remplace 1 ou n fois le caractère ou l'ensemble qui le précède.

? remplace 0 ou 1 fois le caractère ou l'ensemble qui le précède.

Ensembles

Les ensembles sont délimités par les caractères [ et ]. Une série de caractères peut être exprimée avec le caractère -.

Exemples:

[012345679] n'importe quel chiffre.

[0-9] n'importe quel chiffre.

[a-z_] n'importe quel caractère de a à z (minuscules) ou le caractère _.

[^a-z] n'importe quel caractère SAUF les caractères de a à z en minuscule.

Exemples

abc$ lignes se terminant par abc

^abc lignes commençant par abc

[abc] lignes contenant les lettres a ou b ou c

^[abc] lignes commençant par a ou b ou c

.* toutes les lignes

^...$ toutes les lignes de 3 caractères.

Sous ensembles

Permettent de définir des sous-ensemble dans un ensemble de caractère. Les sous-ensembles sont placés entres \( et \) et peuvent êtres rappelés par un numéro correspondant à leur ordre de déclaration, précédé du caractère \.

Exemples:

\(25[0-9]*\).*\1.*\1 toutes les lignes contenant 3 fois le premier chiffre trouvé commençant par 25.

R.750 - 27/04/10 page 1 2000–2010 CML – http://www.e-cml.org/

(2)

Cours UNIX - Chapitre 5 - Filtres

Grep

Grep (Global Regular Expression Printer) permet de faire des recherches de lignes contenant une chaîne correspondant à une expression rationnelle.

Syntaxe:

grep [options] 'expressionrationnelle' [fichiers...]

Si aucun fichier n'est précisé (en dernier argument) alors c'est l'entrée standard qui est filtrée.

Options couramment utilisées:

-v inverse de la recherche (toutes les lignes ne contenant pas l'expression).

-c affiche le nombre de lignes trouvées.

Exemples:

# grep '^[aw-z]' /etc/services

zip 6/ddp #Zone Information Protocol auditd 48/tcp #Digital Audit Daemon auditd 48/udp #Digital Audit Daemon xns-time 52/tcp #XNS Time Protocol ...

# cat /etc/services | grep '^t[^t]o' troff 2014/tcp

# ls -l /etc | grep 'rc\..*$'

-rw-r--r-- 1 root wheel 4903 Nov 20 2000 rc.atm -rw-r--r-- 1 root wheel 217 May 21 09:31 rc.conf -rw-r--r-- 1 root wheel 1667 Nov 20 2000 rc.devfs ...

Sed

Sed (Stream Editor) est un éditeur qui possède les mêmes fonctionnalités que l'éditeur ed mais qui ne travaille pas en mode interactif. Il permet donc, contrairement à grep, de modifier le flux de lignes qui lui est passé.

Syntaxe:

sed [options] 'commande' [fichiers..]

Les commandes sont de la forme:

[adresse1[,adresse2]] fonction [arguments...]

Les adresses sont:

des nombres décimaux correspondant à des numéros de lignes.

Le caractère $ désignant la dernière ligne Exemple: 10,$ désigne de la 10ème à la dernière ligne.

Si les adresses ne sont pas spécifiées, la commande est exécutée sur toutes les lignes.

Commandes couramment utilisées:

y/texte1/texte2

substitution (remplacement) d'un texte par un autre.

s/expressionrationnelle/texte/flags

substitution (remplacement) d'un texte par un autre à l'aide d'une expression rationnelle.

Flags peut être, entre autre:

g remplacer toutes les occurrences dans une même ligne.

Options couramment utilisées:

-n ne pas afficher la ligne qui vient d'être traitée.

Exemples:

# cat /etc/rc.conf ...

ifconfig_xl0="inet 10.0.0.1 netmask 255.255.255.0"

...

# cat /etc/rc.conf | sed 's/255\./xxx\./g' ...

ifconfig_xl0="inet 10.0.0.1 netmask xxx.xxx.xxx.0"

...

R.750 - 27/04/10 page 2 2000–2010 CML – http://www.e-cml.org/

(3)

Cliquez ici pour telecharger le PDF complet

Références

Documents relatifs

However, when the $ metacharacter is added to the pattern, the regular expression pattern engine must match the sequence of three literal characters art and must also match

If you pass an array of regular expression strings as the first parameter, preg_replace() will use the regular expressions one by one to search and

The literal character (number) 7 in the regular expression matches the four instances of the number 7 in the text you are matching..

If the engine can’t find a match starting at the beginning of the string, it’s the transmission that bumps the regex engine along to attempt a match at the next position in the

If the regular expression does have capturing groups, the list will contain the text matched by all the capturing groups for each regex match. The overall regex match is not

Pour calculer algorithmiquement une expression rationnelle pour chacun d’eux, il suffit donc d’utiliser récursivement le procédé d’élimination basé sur le lemme

Écris les expressions suivantes sous forme d’une expression rationnelle et indique

mais pas à une chaîne vide, ni b , ni ae ; Entre ces crochets, un intervalle de caractères peut être indiqué en donnant le premier et le dernier?. caractère, séparés par un tiret