Recherche de site Web

12 commandes utiles pour filtrer le texte pour des opérations de fichiers efficaces sous Linux


Dans cet article, nous passerons en revue un certain nombre d'outils de ligne de commande qui agissent comme des filtres sous Linux. Un filtre est un programme qui lit une entrée standard, effectue une opération dessus et écrit les résultats sur la sortie standard.

Pour cette raison, il peut être utilisé pour traiter les informations de manière puissante, par exemple en restructurant la sortie pour générer des rapports utiles, en modifiant le texte des fichiers et de nombreuses autres tâches d'administration système.

Cela dit, vous trouverez ci-dessous quelques-uns des filtres de fichiers ou de texte utiles sous Linux.

1. Commande Awk

Awk est un langage d'analyse et de traitement de modèles remarquable, il peut être utilisé pour créer des filtres utiles sous Linux. Vous pouvez commencer à l'utiliser en lisant notre série Awk, partie 1 à partie 13.

De plus, lisez également la page de manuel awk pour plus d'informations et d'options d'utilisation :

man awk

2. Commande Sed

sed est un puissant éditeur de flux pour filtrer et transformer du texte. Nous avons déjà écrit deux articles utiles sur sed, que vous pouvez consulter ici :

  1. Comment utiliser la commande GNU « sed » pour créer, modifier et manipuler des fichiers sous Linux
  2. 15 trucs et astuces utiles sur la commande « sed » pour les tâches quotidiennes d’administration du système Linux

La page de manuel sed a ajouté des options de contrôle et des instructions :

man sed

3. Commandes Grep, Egrep, Fgrep, Rgrep

Ces filtres génèrent des lignes correspondant à un modèle donné. Ils lisent les lignes d'un fichier ou d'une entrée standard et impriment toutes les lignes correspondantes par défaut sur la sortie standard.

Remarque : Le programme principal est grep, les variations sont simplement les mêmes que celles utilisées pour l'utilisation d'options grep spécifiques comme ci-dessous (et elles sont toujours utilisées pour des raisons de compatibilité descendante) :

egrep = grep -E
fgrep = grep -F
rgrep = grep -r  

Vous trouverez ci-dessous quelques commandes grep de base :

tecmint@TecMint ~ $ grep "aaronkilik" /etc/passwd
aaronkilik:x:1001:1001::/home/aaronkilik:

tecmint@TecMint ~ $ cat /etc/passwd | grep "aronkilik"
aaronkilik:x:1001:1001::/home/aaronkilik:

Vous pouvez en savoir plus sur Quelle est la différence entre Grep, Egrep et Fgrep sous Linux ?.

4. Commande principale

head est utilisé pour afficher les premières parties d'un fichier, il affiche les 10 premières lignes par défaut. Vous pouvez utiliser l'indicateur -n num pour spécifier le nombre de lignes à afficher :

tecmint@TecMint ~ $ head /var/log/auth.log  
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session closed for user root
Jan  2 10:51:34 TecMint sudo:  tecmint : TTY=unknown ; PWD=/home/tecmint ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py
Jan  2 10:51:34 TecMint sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan  2 10:51:39 TecMint sudo: pam_unix(sudo:session): session closed for user root
Jan  2 10:55:01 TecMint CRON[4099]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 10:55:01 TecMint CRON[4099]: pam_unix(cron:session): session closed for user root
Jan  2 11:05:01 TecMint CRON[4138]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 11:05:01 TecMint CRON[4138]: pam_unix(cron:session): session closed for user root
Jan  2 11:09:01 TecMint CRON[4146]: pam_unix(cron:session): session opened for user root by (uid=0)

tecmint@TecMint ~ $ head  -n 5 /var/log/auth.log  
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session closed for user root
Jan  2 10:51:34 TecMint sudo:  tecmint : TTY=unknown ; PWD=/home/tecmint ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py
Jan  2 10:51:34 TecMint sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan  2 10:51:39 TecMint sudo: pam_unix(sudo:session): session closed for user root

Apprenez à utiliser la commande head avec les commandes tail et cat pour une utilisation efficace sous Linux.

5. Commande de queue

tail affiche les dernières parties (10 lignes par défaut) d'un fichier. Utilisez le commutateur numérique -n pour spécifier le nombre de lignes à afficher.

La commande ci-dessous affichera les 5 dernières lignes du fichier spécifié :

tecmint@TecMint ~ $ tail -n 5 /var/log/auth.log
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.

De plus, tail dispose d'une option spéciale -f pour surveiller les modifications dans un fichier en temps réel (en particulier les fichiers journaux).

La commande suivante vous permettra de surveiller les modifications dans le fichier spécifié :

tecmint@TecMint ~ $ tail -f /var/log/auth.log
Jan  6 12:58:01 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 12:58:11 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 12:58:12 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 12:58:12 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.

Lisez la page de manuel tail pour obtenir une liste complète des options d'utilisation et des instructions :

man tail

6. Commande de tri

Le tri est utilisé pour trier les lignes d'un fichier texte ou à partir d'une entrée standard.

Vous trouverez ci-dessous le contenu d'un fichier nommé domains.list :

tecmint@TecMint ~ $ cat domains.list
linux-console.net
linux-console.net
news.linux-console.net
news.linux-console.net
linuxsay.com
linuxsay.com
windowsmint.com
windowsmint.com

Vous pouvez exécuter une simple commande de tri pour trier le contenu du fichier comme suit :

tecmint@TecMint ~ $ sort domains.list
linuxsay.com
linuxsay.com
news.linux-console.net
news.linux-console.net
linux-console.net
linux-console.net
windowsmint.com
windowsmint.com

Vous pouvez utiliser la commande sort de plusieurs manières. Consultez certains des articles utiles sur la commande sort comme suit :

  1. 14 Exemples utiles de commande Linux « trier » – Partie 1
  2. 7 exemples intéressants de commandes Linux « trier » – Partie 2
  3. Comment rechercher et trier des fichiers en fonction de la date et de l'heure de modification
  4. Comment trier la sortie de la commande « ls » par date et heure de dernière modification

7. Commande unique

La commande uniq est utilisée pour signaler ou omettre les lignes répétées, elle filtre les lignes de l'entrée standard et écrit le résultat sur la sortie standard.

Après avoir exécuté sort sur un flux d'entrée, vous pouvez supprimer les lignes répétées avec uniq comme dans l'exemple ci-dessous.

Pour indiquer le nombre d'occurrences d'une ligne, utilisez l'option -c et ignorez les différences de casse lors de la comparaison en incluant l'option -i :

tecmint@TecMint ~ $ cat domains.list
linux-console.net
linux-console.net
news.linux-console.net
news.linux-console.net
linuxsay.com
linuxsay.com
windowsmint.com

tecmint@TecMint ~ $ sort domains.list | uniq -c 
2 linuxsay.com
2 news.linux-console.net
2 linux-console.net
1 windowsmint.com 

Lisez la page de manuel uniq pour plus d'informations sur l'utilisation et les indicateurs :

man uniq

8. Commande fmt

Formateur de texte simple et optimal fmt, il reformate les paragraphes dans le fichier spécifié et imprime les résultats sur la sortie standard.

Voici le contenu extrait du fichier domain-list.txt :

1.linux-console.net 2.news.linux-console.net 3.linuxsay.com 4.windowsmint.com

Pour reformater le contenu ci-dessus en une liste standard, exécutez la commande suivante avec le commutateur -w utilisé pour définir la largeur de ligne maximale :

tecmint@TecMint ~ $ cat domain-list.txt 
1.linux-console.net 2.news.linux-console.net 3.linuxsay.com 4.windowsmint.com

tecmint@TecMint ~ $ fmt -w 1 domain-list.txt
1.linux-console.net 
2.news.linux-console.net 
3.linuxsay.com 
4.windowsmint.com

9. Commande pr

La commande pr convertit les fichiers texte ou les entrées standard pour l'impression. Par exemple, sur les systèmes Debian, vous pouvez lister tous les paquets installés comme suit :

dpkg -l

Pour organiser la liste en pages et colonnes prêtes à être imprimées, exécutez la commande suivante.

tecmint@TecMint ~ $ dpkg -l | pr --columns 3 -l 20  

2017-01-06 13:19                                                  Page 1


Desired=Unknown/Install ii  adduser		ii  apg
| Status=Not/Inst/Conf- ii  adwaita-icon-theme	ii  app-install-data
|/ Err?=(none)/Reinst-r ii  adwaita-icon-theme- ii  apparmor
||/ Name		ii  alsa-base		ii  apt
+++-=================== ii  alsa-utils		ii  apt-clone
ii  accountsservice	ii  anacron		ii  apt-transport-https
ii  acl			ii  apache2		ii  apt-utils
ii  acpi-support	ii  apache2-bin		ii  apt-xapian-index
ii  acpid		ii  apache2-data	ii  aptdaemon
ii  add-apt-key		ii  apache2-utils	ii  aptdaemon-data


2017-01-06 13:19                                                  Page 2


ii  aptitude		ii  avahi-daemon	ii  bind9-host
ii  aptitude-common	ii  avahi-utils		ii  binfmt-support
ii  apturl		ii  aview		ii  binutils
ii  apturl-common	ii  banshee		ii  bison
ii  archdetect-deb	ii  baobab		ii  blt
ii  aspell		ii  base-files		ii  blueberry
ii  aspell-en		ii  base-passwd		ii  bluetooth
ii  at-spi2-core	ii  bash		ii  bluez
ii  attr		ii  bash-completion	ii  bluez-cups
ii  avahi-autoipd	ii  bc			ii  bluez-obexd

.....

Les drapeaux utilisés ici sont :

  1. --column définit le nombre de colonnes créées dans la sortie.
  2. -l spécifie la longueur de la page (la valeur par défaut est 66 lignes).

10. Commande tr

Cet outil traduit ou supprime les caractères de l'entrée standard et écrit les résultats sur la sortie standard.

La syntaxe d'utilisation de tr est la suivante :

tr options set1 set2

Jetez un œil aux exemples ci-dessous, dans la première commande, set1( [:upper:] ) représente la casse des caractères saisis (tous en majuscules).

Alors set2([:lower:]) représente la casse dans laquelle seront les caractères résultants. C'est la même chose dans le deuxième exemple et la séquence d'échappement \n signifie imprimer la sortie sur une nouvelle ligne :

tecmint@TecMint ~ $ echo "WWW.TECMINT.COM" | tr [:upper:] [:lower:]
linux-console.net

tecmint@TecMint ~ $ echo "news.linux-console.net" | tr [:lower:] [:upper:]
NEWS.TECMINT.COM

11. plus de commande

La commande plus est un filtre de lecture de fichiers utile créé essentiellement pour l'affichage des certificats. Il affiche le contenu du fichier dans un format semblable à celui d'une page, où les utilisateurs peuvent appuyer sur [Entrée] pour afficher plus d'informations.

Vous pouvez l'utiliser pour afficher des fichiers volumineux comme ceci :

tecmint@TecMint ~ $ dmesg | more
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic
 4.4.6)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable
[    0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable
--More--

12. moins de commandement

less est à l'opposé de la commande more ci-dessus, mais elle offre des fonctionnalités supplémentaires et elle est un peu plus rapide avec des fichiers volumineux.

Utilisez-le de la même manière que d'autres :

tecmint@TecMint ~ $ dmesg | less
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic
 4.4.6)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable
[    0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable
:

Découvrez pourquoi « moins » est plus rapide que « plus » Commande pour une navigation efficace dans les fichiers sous Linux.

C'est tout pour l'instant, faites-nous part de tout outil de ligne de commande utile non mentionné ici, qui agit comme un filtre de texte sous Linux via la section commentaires ci-dessous.