Académique Documents
Professionnel Documents
Culture Documents
10.1 Introduction
Un grand nombre de fichiers dans un système de fichiers typique sont des fichiers texte. Les
fichiers texte ne contiennent que du texte, sans les caractéristiques de formatage que vous
pourriez voir dans un fichier de traitement de texte.
Comme il y a un grand nombre de ces fichiers sur un système Linux typique, il existe un
nombre important de commandes pour aider les utilisateurs à manipuler les fichiers texte. Il
existe des commandes permettant à la fois de visualiser et de modifier ces fichiers de
diverses manières.
La commande cat, abréviation de concatenate, est une commande simple mais utile dont les
fonctions incluent la création et l'affichage de fichiers texte, ainsi que la combinaison de
copies de fichiers texte. L'une des utilisations les plus courantes de cat est l'affichage du
contenu des fichiers texte. Pour afficher un fichier dans la sortie standard à l'aide de la
commande cat, tapez la commande suivie du nom du fichier :
sysadmin@localhost:~$ cd Documents
sysadmin@localhost:~/Documents$ cat food.txt
Food is good.
Bien que le terminal soit la sortie par défaut de cette commande, la commande cat peut
également être utilisée pour rediriger le contenu des fichiers vers d'autres fichiers ou vers
l'entrée d'une autre commande en utilisant des caractères de redirection.
Si l'affichage de petits fichiers avec la commande cat ne pose aucun problème, ce n'est pas
un choix idéal pour les gros fichiers. La commande cat ne permet pas de mettre en pause et
de relancer l'affichage, de sorte que le contenu du fichier est entièrement affiché à l'écran.
Pour les fichiers plus volumineux, utilisez une commande de pagination pour en visualiser le
contenu. Les commandes de pagination affichent une page de données à la fois, ce qui vous
permet d'avancer et de reculer dans le fichier en utilisant les touches de déplacement.
Les commandes more et less permettent aux utilisateurs de se déplacer dans le document à
l'aide de commandes clavier. Comme les développeurs ont basé la commande less sur la
fonctionnalité de la commande more, toutes les commandes clavier disponibles dans la
commande more fonctionnent également dans la commande less.
Notre contenu se concentre sur la commande less, plus avancée. La commande more est
toujours utile pour les cas où la commande less n'est pas disponible. N'oubliez pas que la
plupart des commandes clavier fournies fonctionnent pour les deux commandes.
Pour visualiser un fichier avec la commande less, passez le nom du fichier comme argument :
Le premier groupe de commandes de mouvement sur lequel nous allons nous concentrer est
celui qui est le plus couramment utilisé. Pour rendre les choses encore plus pratiques, les
touches qui sont identiques en plus et en moins sont résumées ci-dessous afin de démontrer
comment se déplacer en plus et en moins en même temps :
Key Movement
B Window backward
Q Exit
H Help
Lorsque vous utilisez less comme un pager, le moyen le plus simple d'avancer d'une page est
d'appuyer sur la barre d'espacement.
10.1.2.2 Commandes de recherche du téléavertisseur
Il y a deux façons d'effectuer une recherche dans la commande less : recherche en avant ou
en arrière à partir de votre position actuelle.
Pour lancer une recherche vers l'avant à partir de votre position actuelle, utilisez la touche
barre oblique /. Ensuite, tapez le texte ou le motif à rechercher et appuyez sur la touche
Entrée.
Abdul
Abdul's
Abe
/frog
Si une correspondance est trouvée, le curseur se déplace dans le document jusqu'à cette
correspondance. Par exemple, dans le graphique suivant, l'expression "grenouille" a été
recherchée dans le fichier de mots :
bullfrog
bullfrog's
bullfrogs
bullheaded
bullhorn
bullhorn's
Remarquez que "grenouille" n'a pas besoin d'être un mot en soi. Remarquez également que,
bien que la commande less se déplace vers la première correspondance à partir de la
position actuelle, toutes les correspondances sont mises en évidence.
Pour effectuer une recherche en arrière à partir de votre position actuelle, appuyez sur la
touche point d'interrogation ?, puis tapez le texte ou le motif à rechercher et appuyez sur la
touche Entrée. Le curseur se déplace vers l'arrière jusqu'à la première correspondance qu'il
trouve ou signale que le motif est introuvable.
Si une recherche permet de trouver plus d'une correspondance, utilisez la touche n pour
passer à la correspondance suivante et utilisez la combinaison de touches Shift+N pour
passer à une correspondance précédente.
Les termes de recherche utilisent en fait des modèles appelés expressions régulières. Vous
trouverez plus de détails sur les expressions régulières plus loin dans ce chapitre.
Les commandes head et tail sont utilisées pour afficher uniquement les premières ou les
dernières lignes d'un fichier, respectivement (ou, lorsqu'elles sont utilisées avec un pipe, la
sortie d'une commande précédente). Par défaut, les commandes head et tail affichent dix
lignes du fichier fourni en argument.
Par exemple, la commande suivante affiche les dix premières lignes du fichier
/etc/sysctl.conf :
sysadmin@localhost:~/Documents$ cd
sysadmin@localhost:~$ head /etc/sysctl.conf
#
# /etc/sysctl.conf - Configuration file for setting system variables
# See /etc/sysctl.d/ for additional system variables
# See sysctl.conf (5) for information.
#
#kernel.domainname = example.com
En passant un nombre comme option, les commandes head et tail afficheront le nombre de
lignes spécifié, au lieu des dix standard. Par exemple, pour afficher les cinq dernières lignes
du fichier /etc/sysctl.conf, utilisez l'option -5 :
L'option -n peut également être utilisée pour indiquer le nombre de lignes à sortir. Passez un
nombre comme argument à l'option :
sysadmin@localhost:~$ head -n 3 /etc/sysctl.conf
#
# /etc/sysctl.conf - Configuration file for setting system variables
# See /etc/sysctl.d/ for additional system variables
Traditionnellement, sous UNIX, le nombre de lignes à afficher était spécifié en tant qu'option
avec l'une ou l'autre des commandes, ainsi -3 signifiait afficher trois lignes. Pour la
commande tail, -3 ou -n -3 signifie toujours afficher trois lignes.
Cependant, la version GNU de la commande head reconnaît -n -3 comme affichant toutes les
lignes sauf les trois dernières, et pourtant la commande head reconnaît toujours l'option -3
comme affichant les trois premières lignes.
Considérez ceci
Un bon exemple de ceci est l'affichage des fichiers journaux en tant qu'administrateur
système. Les fichiers journaux peuvent être utilisés pour résoudre des problèmes et les
administrateurs les visualisent souvent de manière "interactive" avec la commande tail tout
en exécutant des commandes dans une fenêtre séparée.
Par exemple, si vous vous connectez en tant qu'utilisateur root, vous pouvez résoudre des
problèmes avec le serveur de messagerie en visualisant les modifications en direct du fichier
journal /var/log/mail.log.
Le caractère pipe | peut être utilisé pour envoyer la sortie d'une commande à une autre. En
général, lorsqu'une commande produit un résultat ou génère une erreur, la sortie est
affichée à l'écran ; cependant, ce n'est pas forcément le cas. Au lieu d'être imprimée à
l'écran, la sortie d'une commande devient une entrée pour la commande suivante. Cet outil
peut s'avérer puissant, notamment lorsqu'il s'agit de rechercher des données spécifiques ; la
tuyauterie est souvent utilisée pour affiner les résultats d'une commande initiale.
Dans les exemples précédents, les commandes head et tail ont reçu des fichiers comme
arguments sur lesquels opérer. Cependant, le caractère pipe vous permet d'utiliser ces
commandes non seulement sur des fichiers, mais aussi sur la sortie d'autres commandes.
Cela peut être utile pour lister un grand répertoire, par exemple le répertoire /etc :
sysadmin@localhost:~$ ls /etc
X11 gss mke2fs.conf rpc
adduser.conf host.conf modprobe.d rsyslog.conf
alternatives hostname modules rsyslog.d
apparmor hosts modules-load.d securetty
apparmor.d hosts.allow motd security
apt hosts.deny mtab selinux
bash.bashrc init.d nanorc services
bind initramfs-tools netplan shadow
bindresvport.blacklist inputrc network shadow-
binfmt.d insserv.conf.d networks shells
ca-certificates iproute2 newt skel
ca-certificates.conf issue nsswitch.conf ssh
calendar issue.net opt ssl
console-setup kernel os-release subgid
cron.d ld.so.cache pam.conf subgid-
cron.daily ld.so.conf pam.d subuid
cron.hourly ld.so.conf.d passwd subuid-
cron.monthly ldap passwd- sudoers
cron.weekly legal perl sudoers.d
crontab libaudit.conf pinforc sysctl.conf
dbus-1 locale.alias ppp sysctl.d
debconf.conf locale.gen profile systemd
debian_version localtime profile.d terminfo
default logcheck protocols timezone
deluser.conf login.defs python3 tmpfiles.d
depmod.d logrotate.conf python3.6 ucf.conf
dhcp logrotate.d rc0.d udev
dpkg lsb-release rc1.d ufw
environment machine-id rc2.d update-motd.d
fstab magic rc3.d updatedb.conf
gai.conf magic.mime rc4.d vim
groff mailcap rc5.d vtrgb
group mailcap.order rc6.d wgetrc
group- manpath.config rcS.d xdg
gshadow mc resolv.conf
gshadow- mime.types rmt
La commande précédente liste un grand nombre de fichiers. Si vous l'exécutez dans notre
terminal, la sortie est coupée et ne peut être visualisée qu'en la faisant défiler vers le haut.
Pour visualiser plus facilement le début de la sortie, il faut la diriger vers la commande head.
L'exemple suivant affiche uniquement les dix premières lignes :
La sortie complète de la commande ls est transmise à la commande head par le shell au lieu
d'être imprimée à l'écran. La commande head prend cette sortie de la commande ls comme
données d'entrée, et la sortie de head est ensuite imprimée à l'écran.
Plusieurs pipes peuvent être utilisés consécutivement pour lier plusieurs commandes entre
elles. Si trois commandes sont reliées par un pipe, la sortie de la première commande est
transmise à la seconde. Ensuite, la sortie de la deuxième commande est transmise à la
troisième commande. La sortie de la troisième commande est ensuite imprimée à l'écran.
Il est important de choisir soigneusement l'ordre dans lequel les commandes sont
transmises, car chaque commande ne voit que l'entrée de la commande précédente. Les
exemples ci-dessous illustrent ce point en utilisant la commande nl, qui ajoute les numéros
de ligne à la sortie. Dans le premier exemple, la commande nl est utilisée pour numéroter les
lignes de la sortie de la commande ls précédente :
sysadmin@localhost:~$ ls /etc/ssh | nl
1 moduli
2 ssh_config
3 ssh_host_ecdsa_key
4 ssh_host_ecdsa_key.pub
5 ssh_host_ed25519_key
6 ssh_host_ed25519_key.pub
7 ssh_host_rsa_key
8 ssh_host_rsa_key.pub
9 ssh_import_id
10 sshd_config
Dans l'exemple suivant, notez que la commande ls est exécutée en premier et que sa sortie
est envoyée à la commande nl, qui numérote toutes les lignes de la sortie de la commande
ls. Ensuite, la commande tail est exécutée, affichant les cinq dernières lignes de la sortie de
la commande nl :
Remarquez que les numéros de ligne sont différents. Comment cela se fait-il ?
STDIN
L'entrée standard, ou STDIN, est une information saisie normalement par l'utilisateur via le
clavier. Lorsqu'une commande demande des données à l'interpréteur de commandes, ce
dernier offre à l'utilisateur la possibilité de taper des commandes qui, à leur tour, sont
envoyées à la commande en tant que STDIN.
STDOUT
STDERR
L'erreur standard, ou STDERR, est un message d'erreur généré par les commandes. Par
défaut, STDERR est affiché dans la fenêtre du terminal dans lequel la commande est
exécutée. STDERR est également connu sous le nom de flux ou canal n°2.
La redirection d'E/S permet à l'utilisateur de rediriger STDIN pour que les données
proviennent d'un fichier et STDOUT/STDERR pour que la sortie aille vers un fichier. La
redirection est réalisée à l'aide des caractères fléchés < >.
10.3.1 STDOUT
STDOUT peut être dirigé vers des fichiers. Pour commencer, observez la sortie de la
commande echo suivante qui s'affiche à l'écran :
En utilisant le caractère >, la sortie peut être redirigée vers un fichier à la place :
sysadmin@localhost:~$ ls
Desktop Downloads Pictures Templates example.txt
Documents Music Public Videos
Le fichier contient la sortie de la commande echo, qui peut être visualisée avec la commande
cat :
Il est important de comprendre que la flèche unique écrase tout le contenu d'un fichier
existant :
Il est également possible de préserver le contenu d'un fichier existant en l'annexant. Utilisez
les deux flèches >> pour ajouter un fichier au lieu de l'écraser :
Au lieu d'être écrasée, la sortie de la commande echo est ajoutée au bas du fichier.
10.3.2 STDERR
STDERR peut être redirigé de la même manière que STDOUT. Lorsque l'on utilise le caractère
flèche pour rediriger, le flux n°1 (STDOUT) est supposé, sauf si un autre flux est spécifié.
Ainsi, le flux n°2 doit être spécifié lors de la redirection de STDERR en plaçant le nombre 2
avant le caractère flèche >.
sysadmin@localhost:~$ ls /fake
ls: cannot access /fake: No such file or directory
Notez qu'il n'y a rien dans l'exemple ci-dessus qui implique que la sortie est STDERR. La
sortie est clairement un message d'erreur, mais comment pouvez-vous savoir qu'elle est
envoyée à STDERR ? Une façon simple de le déterminer est de rediriger STDOUT :
Dans l'exemple ci-dessus, STDOUT a été redirigé vers le fichier output.txt. Ainsi, la sortie qui
est affichée ne peut pas être STDOUT car elle aurait été placée dans le fichier output.txt au
lieu du terminal. Puisque toutes les sorties de commandes vont soit vers STDOUT soit vers
STDERR, la sortie affichée ci-dessus doit être STDERR.
Dans l'exemple, le 2> indique que tous les messages d'erreur doivent être envoyés dans le
fichier error.txt, ce qui peut être confirmé à l'aide de la commande cat :
Il est possible de diriger à la fois le STDOUT et le STDERR d'une commande en même temps.
La commande suivante produit à la fois STDOUT et STDERR car l'un des répertoires spécifiés
existe et l'autre non :
Si seul le STDOUT est envoyé dans un fichier, le STDERR est toujours imprimé à l'écran :
Si seul le STDERR est envoyé dans un fichier, le STDOUT est toujours imprimé à l'écran :
STDOUT et STDERR peuvent tous deux être envoyés dans un fichier en utilisant le caractère
esperluette & devant le caractère flèche >. Le jeu de caractères &> signifie à la fois 1> et 2> :
Notez que lorsque vous utilisez &>, la sortie apparaît dans le fichier avec tous les messages
STDERR en haut et tous les messages STDOUT en dessous de tous les messages STDERR :
sysadmin@localhost:~$ ls /fake /etc/ppp /junk /etc/sound &> all.txt
sysadmin@localhost:~$ cat all.txt
ls: cannot access '/fake': No such file or directory
ls: cannot access '/junk': No such file or directory
ls: cannot access '/etc/sound': No such file or directory
/etc/ppp:
ip-down.d
ip-up.d
Si vous ne voulez pas que STDERR et STDOUT aillent tous deux dans le même fichier, ils
peuvent être redirigés vers des fichiers différents en utilisant à la fois > et 2>. Par exemple,
pour diriger STDOUT vers example.txt et STDERR vers error.txt, exécutez ce qui suit :
L'ordre dans lequel les flux sont spécifiés n'a pas d'importance.
10.3.4. STDIN
Le concept de redirection de STDIN est difficile car il est plus difficile de comprendre
pourquoi vous voudriez rediriger STDIN. En ce qui concerne STDOUT et STDERR, leur objectif
est simple : il est parfois utile de stocker la sortie dans un fichier pour une utilisation
ultérieure.
La plupart des utilisateurs de Linux finissent par rediriger STDOUT de manière routinière,
STDERR à l'occasion, et STDIN très rarement.
Il y a très peu de commandes qui nécessitent de rediriger STDIN car avec la plupart des
commandes, si vous voulez lire des données d'un fichier dans une commande, vous pouvez
spécifier le nom du fichier comme argument de la commande.
Pour certaines commandes, si vous ne spécifiez pas de nom de fichier en argument, elles
reviennent à l'utilisation de STDIN pour obtenir des données. Par exemple, considérez la
commande cat suivante :
sysadmin@localhost:~$ cat
hello
hello
how are you?
how are you?
goodbye
goodbye
Note
Si vous tentez d'exécuter la commande cat sans arguments, arrêtez le processus et revenez à
l'invite en utilisant Ctrl+C.
Dans l'exemple précédent, la commande cat ne reçoit pas de nom de fichier en argument.
Elle demande donc les données à afficher à l'écran à partir de STDIN. L'utilisateur tape hello,
et la commande cat affiche hello à l'écran. Bien que cela soit légèrement divertissant, ce
n'est pas particulièrement utile.
Cependant, si la sortie de la commande cat était redirigée vers un fichier, cette méthode
pourrait être utilisée soit pour ajouter du texte à un fichier existant, soit pour placer du texte
dans un nouveau fichier.
Par exemple, pour mettre en majuscule une ligne de texte, utilisez la commande tr comme
suit :
sysadmin@localhost:~$ tr 'a-z' 'A-Z'
watch how this works
WATCH HOW THIS WORKS
La commande tr prend le STDIN du clavier et convertit toutes les lettres en minuscules avant
d'envoyer le STDOUT à l'écran.
La plupart des commandes acceptent les noms de fichiers comme arguments, ce cas
d'utilisation est donc relativement rare. Cependant, pour celles qui ne le font pas, cette
méthode peut être utilisée pour que l'interpréteur de commandes lise le fichier au lieu de
compter sur la commande pour avoir cette capacité.
Une dernière remarque pour sauvegarder la sortie résultante, redirigez-la dans un autre
fichier :
La commande sort peut être utilisée pour réorganiser les lignes des fichiers ou des entrées
dans l'ordre du dictionnaire ou numérique. L'exemple suivant crée un petit fichier, en
utilisant la commande head pour récupérer les 5 premières lignes du fichier /etc/passwd et
envoyer la sortie dans un fichier appelé mypasswd.
En examinant de près la sortie de l'exemple précédent, la commande sort a classé les lignes
du fichier par ordre alphabétique. Comparez cette sortie à celle de la commande cat
précédente.
La commande suivante peut être utilisée pour trier numériquement le troisième champ du
fichier mypasswd. Trois options sont utilisées pour réaliser ce tri :
Option Function
-t: The -t option specifies the field delimiter. If the file or input is separated by a
delimiter other than whitespace, for example a comma or colon, the -t option will
allow for another field separator to be specified as an argument.
The mypasswd file used in the previous example uses a colon : character as a
delimiter to separate the fields, so the following example uses the -t: option.
-k3 The -k option specifies the field number. To specify which field to sort by, use the -
k option with an argument to indicate the field number, starting with 1 for the first
field.
The following example uses the -k3 option to sort by the third field.
Une autre option couramment utilisée pour la commande sort est l'option -r, qui permet
d'effectuer un tri inverse. L'exemple suivant montre la même commande que l'exemple
précédent, avec l'ajout de l'option -r, ce qui fait que les nombres les plus élevés dans le
troisième champ apparaissent en haut de la sortie :
Enfin, vous pouvez souhaiter effectuer des tris plus complexes, comme le tri par un champ
primaire, puis par un champ secondaire. Par exemple, considérez le fichier de valeurs
séparées par des virgules suivant, un fichier où le caractère virgule est le délimiteur de
champ :
Follow Along
Use the following command to switch to the Documents directory:
sysadmin@localhost:~$ cd ~/Documents
Pour trier d'abord par le système d'exploitation (champ n° 2) puis par l'année (champ n° 1) et
ensuite par le nom de famille (champ n° 3), utilisez la commande suivante :
The following table breaks down the options used in the previous example:
Option Function
1. Nombre de lignes
2. Nombre de mots
3. Nombre d'octets
4. Nom du fichier
La commande wc peut être utile pour compter le nombre de lignes produites par une autre
commande via un pipe. Par exemple, si vous voulez connaître le nombre total de fichiers
dans le répertoire /etc, envoyez la sortie de ls à wc et comptez seulement le nombre de
lignes :
sysadmin@localhost:~$ ls /etc/ | wc -l
142
La commande cut permet d'extraire des colonnes de texte d'un fichier ou de l'entrée
standard. Elle est principalement utilisée pour travailler avec des fichiers de base de données
délimités. Encore une fois, les fichiers délimités sont des fichiers qui contiennent des
colonnes séparées par un délimiteur. Ces fichiers sont très courants sur les systèmes Linux.
Par défaut, la commande cut s'attend à ce que son entrée soit séparée par le caractère
tabulation, mais l'option -d permet de spécifier d'autres délimiteurs tels que les deux points
ou la virgule.
L'option -f permet de spécifier les champs à afficher, soit sous la forme d'une plage de traits
d'union, soit sous la forme d'une liste séparée par des virgules.
Dans l'exemple suivant, les premier, cinquième, sixième et septième champs du fichier de
base de données mypasswd sont affichés :
La commande cut est également capable d'extraire des colonnes de texte en fonction de la
position des caractères avec l'option -c - utile lorsque vous travaillez avec des fichiers de
base de données à largeur fixe ou des sorties de commande.
Par exemple, les champs de la commande ls -l sont toujours dans les mêmes positions de
caractères. La commande suivante affichera uniquement le type de fichier (caractère 1), les
autorisations (caractères 2-10), un espace (caractère 11) et le nom du fichier (caractères
50+) :
La commande grep peut être utilisée pour filtrer les lignes d'un fichier ou la sortie d'une
autre commande qui correspond à un modèle spécifié. Ce modèle peut être aussi simple que
le texte exact que vous voulez faire correspondre ou peut être beaucoup plus avancé grâce à
l'utilisation d'expressions régulières.
Par exemple, pour trouver tous les utilisateurs qui peuvent se connecter au système avec
l'interpréteur de commandes BASH, la commande grep peut être utilisée pour filtrer les
lignes du fichier /etc/passwd pour les lignes contenant le motif bash :
Pour faciliter la visualisation de ce qui correspond exactement, utilisez l'option --color. Cette
option met en évidence les éléments correspondants en rouge :
Note
Sur nos machines virtuelles, la commande grep est aliasée pour inclure automatiquement
l'option --color.
Dans certains cas, il n'est pas important de trouver les lignes spécifiques qui correspondent
au motif, mais plutôt le nombre de lignes correspondant au motif. L'option -c fournit un
compte du nombre de lignes correspondant :
Lorsque vous visualisez la sortie de la commande grep, il peut être difficile de déterminer les
numéros de ligne d'origine. Cette information peut être utile lorsqu'on retourne dans le
fichier (peut-être pour l'éditer) pour trouver rapidement une des lignes correspondantes.
L'option -n de la commande grep permet d'afficher les numéros de ligne originaux. Pour
afficher toutes les lignes et leurs numéros de ligne dans le fichier /etc/passwd qui
contiennent le motif bash :
L'option -v inverse la correspondance, en affichant toutes les lignes qui ne contiennent pas le
motif. Pour afficher toutes les lignes ne contenant pas nologin dans le fichier /etc/passwd :
sysadmin@localhost:~$ cd Documents
sysadmin@localhost:~/Documents$ grep -i the newhome.txt
There are three bathrooms.
**Beware** of the ghost in the bedroom.
The kitchen is open for entertaining.
**Caution** the spirits don't like guests.
L'option -w ne renvoie que les lignes contenant des correspondances qui forment des mots
entiers. Pour être un mot, la chaîne de caractères doit être précédée et suivie d'un caractère
non-mot. Les caractères de mot comprennent les lettres, les chiffres et le caractère de
soulignement.
Les exemples suivants recherchent le motif are dans le fichier newhome.txt. La première
commande effectue une recherche sans option, tandis que la deuxième commande inclut
l'option -w. Comparez les résultats :
Les caractères normaux sont des caractères alphanumériques qui se correspondent eux-
mêmes. Par exemple, un a correspond à un a. Les caractères spéciaux ont des significations
particulières lorsqu'ils sont utilisés dans des motifs par des commandes comme la
commande grep. Ils se comportent d'une manière plus complexe et ne correspondent pas à
eux-mêmes.
Il existe des expressions régulières de base (disponibles pour une grande variété de
commandes Linux) et des expressions régulières étendues (disponibles pour les commandes
Linux plus avancées). Les expressions régulières de base comprennent les éléments suivants
:
Character Matches
^ If the first character in the pattern, the pattern must be at the beginning of the
line to match, otherwise just a literal ^ character
$ If the last character in the pattern, the pattern must be at the end of the line to
match, otherwise just a literal $ character
La commande grep n'est qu'une des nombreuses commandes qui prennent en charge les
expressions régulières. Parmi les autres commandes, citons les commandes more et less.
Bien que certaines des expressions régulières soient inutilement encadrées par des
guillemets simples, il est bon d'utiliser des guillemets simples autour des expressions
régulières pour éviter que l'interpréteur de commandes n'essaie d'en interpréter une
signification particulière.
Le motif r..f trouverait toute ligne contenant la lettre r suivie d'exactement deux caractères
et ensuite la lettre f :
La ligne ne doit pas nécessairement être une correspondance exacte, elle doit simplement
contenir le motif, comme on le voit ici lorsque r..t est recherché dans le fichier /etc/passwd :
Le caractère point peut être utilisé un nombre illimité de fois. Pour trouver tous les mots qui
ont au moins quatre caractères, on peut utiliser le modèle suivant :
sysadmin@localhost:~/Documents$ grep '....' red.txt
reef
reeed
roof
reed
root
reel
read
Lorsque vous utilisez le caractère ., n'importe quel caractère peut correspondre à celui-ci.
Dans certains cas, vous voulez spécifier exactement les caractères que vous voulez faire
correspondre, comme un caractère alphabétique minuscule ou un caractère numérique.
Pour trouver toutes les lignes du fichier profile.txt contenant un numéro, utilisez le modèle
[0123456789] ou [0-9] :
Notez que chaque caractère possible peut être énuméré [abcd] ou fourni sous la forme
d'une plage [a-d], à condition que la plage soit dans l'ordre correct. Par exemple, [d-a] ne
fonctionnerait pas car il ne s'agit pas d'une plage valide :
sysadmin@localhost:~/Documents$ grep '[d-a]' profile.txt
grep: Invalid range end
La plage est spécifiée par une norme appelée table ASCII. Cette table est une collection de
tous les caractères imprimables dans un ordre spécifique. Vous pouvez voir la table ASCII
avec la commande ascii. Un petit échantillon :
041 33 21 ! 141 97 61 a
042 34 22 “ 142 98 62 b
043 35 23 # 143 99 63 c
044 36 24 $ 144 100 64 d
045 37 25 % 145 101 65 e
046 38 26 & 146 102 66 f
La valeur ASCII de la lettre a est 97 tandis que la valeur de d est 100. Comme 97 est plus petit
que 100, l'intervalle a-d (97-100) est un intervalle valide.
Pour faire correspondre un caractère qui n'est pas l'un des caractères listés, commencez le
jeu par le symbole ^. Pour trouver toutes les lignes qui contiennent des caractères non
numériques, insérez un ^ comme premier caractère à l'intérieur des parenthèses. Ce
caractère annule les caractères énumérés :
Considérez ceci
Ne confondez pas [^0-9] avec les lignes qui ne contiennent pas de chiffres. Il correspond en
fait à des lignes qui ne contiennent pas de nombres. Regardez le fichier original pour voir la
différence. Les troisième et sixième lignes ne contiennent que des chiffres ; elles ne
contiennent pas de non-nombres, donc ces lignes ne correspondent pas.
10.8.3. Le caractère astérisque *.
Le caractère astérisque * est utilisé pour correspondre à zéro ou plusieurs occurrences d'un
caractère ou d'un motif qui le précède. Par exemple, e* correspondrait à zéro ou plusieurs
occurrences de la lettre e :
Il est également possible de faire correspondre zéro ou plusieurs occurrences d'une liste de
caractères en utilisant les crochets. Le motif [oe]* utilisé dans l'exemple suivant correspond
à zéro ou plusieurs occurrences du caractère o ou du caractère e :
Lorsqu'il est utilisé avec un seul autre caractère, * n'est pas très utile. L'un des motifs
suivants correspondrait à chaque chaîne ou ligne du fichier : '.*' 'e*' 'b*' 'z*' parce que le
caractère astérisque * peut correspondre à zéro occurrence d'un motif.
sysadmin@localhost:~/Documents$ grep 'z*' red.txt
red
reef
rot
reeed
rd
rod
roof
reed
root
reel
read
Pour rendre le caractère astérisque utile, il est nécessaire de créer un motif qui inclut plus
que le seul caractère qui le précède. Par exemple, les résultats ci-dessus peuvent être affinés
en ajoutant un autre e pour que le motif ee* corresponde effectivement à chaque ligne
contenant au moins un e.
Par exemple, le motif root apparaît de nombreuses fois dans le fichier /etc/passwd :
Le caractère ^ (accent circonflexe) est utilisé pour s'assurer qu'un motif apparaît en début de
ligne. Par exemple, pour trouver toutes les lignes de /etc/passwd qui commencent par root,
utilisez le motif ^root. Notez que ^ doit être le premier caractère du motif pour être efficace
:
Le deuxième caractère d'ancrage $ peut être utilisé pour s'assurer qu'un motif apparaît à la
fin de la ligne, ce qui réduit efficacement les résultats de la recherche. Pour trouver les lignes
qui se terminent par un r dans le fichier alpha-first.txt, utilisez le motif r$ :
Dans certains cas, vous pouvez vouloir faire correspondre un caractère qui se trouve être un
caractère spécial d'expression régulière. Par exemple, considérez l'exemple suivant :
Good luck!!!
sysadmin@localhost:~/Documents$ grep 're*' newhome.txt
Thanks for purchasing your new home!!
**Warning** it may be haunted.
There are three bathrooms.
**Beware** of the ghost in the bedroom.
The kitchen is open for entertaining.
**Caution** the spirits don't like guests.
L'utilisation d'expressions régulières étendues nécessite souvent qu'une option spéciale soit
fournie à la commande pour les reconnaître. Historiquement, il existe une commande
appelée egrep, qui est similaire à grep, mais qui peut comprendre les expressions régulières
étendues. Maintenant, la commande egrep est dépréciée en faveur de l'utilisation de grep
avec l'option -E.
Character Meaning