Vous n'êtes pas connecté - Connexion ou Créer un compte

Classée dans Questions > Questions / Réponses

UNIX — Filtrer les résultats d'une commande

Administrateur
Une annonce aurait pu être ici :'(

Il peut s'avérer utile de filtrer les résultats d'une ligne de commande sous un système UNIX. Il existe déjà la commande grep qui permet avec des expressions régulières ou de simples motifs de filtrer les lignes.

Filtrer les lignes avec grep

Filtrage basique

ls -l | grep "test"

Cette commande afficha les lignes contenant test.

Filtrage insensible à la casse

ls -l | grep -i "test"

Cette commande afficher les lignes contenant test quelle que soit sa casse : test, TEST, Test, etc.

Filtrage inversé (ne contient pas)

ls -l | grep -v "test"

Cette commande affiche les lignes ne contenant pas test.

Afficher le numéro de la ligne

ls -l | grep -n "test"

On ajoute simplement n à la liste des options. Si nous en avions d'autres, nous aurions écrit : -vn, pour cumuler v et n par exemple.

Expression régulière

Il est possible de rechercher un motif d'expression régulière :

GPL-3 | grep "^[A-Z]"

Cette commande affiche les lignes commençant par une majuscule (A-Z).

Filtrer les colonnes avec awk

echo "Colonne1 Colonne2 Colonne3" | awk '{print $2}'

Cette commande affiche Colonne2.

echo "Colonne1 Colonne2 Colonne3" | awk '{print $2,$3}'

Cette commande affiche Colonne2 Colonne3.

echo "Colonne1 Colonne2 Colonne3" | awk '{print $3,$1}'

Filtre les lignes en fonction de la valeur d'une colonne

ls -l | awk '{if ($5 == "4096") print $0;}'

Cette commande n'affiche que les lignes dont la valeur de la 5e colonne ($5) vaut 4096.

Combiner grep et awk

Il est possible de combiner les commandes grep et awk.

Vérifier l'espace disque avec df -h ou df -k (pour avoir la taille en octets) :

~$ df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
/dev/sda1          455G     14G  418G   4% /
none               4,0K       0  4,0K   0% /sys/fs/cgroup
udev               1,9G    4,0K  1,9G   1% /dev
tmpfs              384M    1,2M  382M   1% /run
none               5,0M       0  5,0M   0% /run/lock
none               1,9G     30M  1,9G   2% /run/shm
none               100M     40K  100M   1% /run/user

Espace disque restant sur sda1

df -h | grep "/sda1" | awk '{print $1,$4}'

Il n'est plus possible de répondre à cette question car elle marquée comme résolue.