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 :
- Comment utiliser la commande GNU « sed » pour créer, modifier et manipuler des fichiers sous Linux
- 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 :
- 14 Exemples utiles de commande Linux « trier » – Partie 1
- 7 exemples intéressants de commandes Linux « trier » – Partie 2
- Comment rechercher et trier des fichiers en fonction de la date et de l'heure de modification
- 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 :
--column
définit le nombre de colonnes créées dans la sortie.-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.