UNIX — Filtrer les résultats d'une commande
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}'