SCOLS-FILTER(5) Formats de fichier et conventions SCOLS-FILTER(5)

scols-filter - syntaxe pour les expressions de filtre de libsmartcols

expr: param
      | ( expr )
      | expr && expr | expr AND expr
      | expr || expr | expr OR expr
      | !expr        | NOT expr
      | expr == expr | expr EQ expr
      | expr != expr | expr NE expr
      | expr >= expr | expr GE expr
      | expr <= expr | expr LE expr
      | expr >  expr | expr GT expr
      | expr <  expr | expr LT expr
      | expr =~ string
      | expr !~ string
param: entier
      | virgule flottante
      | chaîne
      | booléen
      | holder
entier: [0-9]*
      | [0-9]*[KMGTPEZY]
      | [0-9]*[KMGTPEZY]iB
virgule flottante: entier.entier
booléen: "true" | "false" | "TRUE" | "FALSE"
chaîne: "[^\n\"]*" | '[^\n\']*'
holder: [a-zA-Z][a-zA-Z_.%:/\-0-9]*

L’expression de filtre peut être utilisée par l’application liée à libsmartcols pour filtrer les données en sortie. L’application peut utiliser le filtre avant de collecter toutes les données de la sortie afin de réduire les ressources et améliorer la performance. Cela rend le filtre scols plus efficace que grep(1) sur la sortie complète. Par exemple

 lsblk --output NOM,ÉTIQUETTE,TYPESF --filter 'NOM=="sda1"'

aide lsblk(1) à ne pas lire les ÉTIQUETTES pour tous les périphériques blocs de udevd ou libblkid mais le lire uniquement pour le périphérique sda1.

Le filtre peut aussi être utilisé pour les colonnes qui ne sont pas utilisées dans la sortie.

Une expression consiste en holders, params et opérateurs.

Le seul type de « holder » actuellement supporté est le nom de la colonne. Le nom doit être utilisé sans guillemets. Avant l’évaluation, l’application fait correspondre les noms des colonnes dans l’expression donnée avec les colonnes de la table de sortie et assigne le type de donnée de la colonne au « holder ». Le type par défaut est « chaîne ».

Le « param » représente une valeur directement. Les types de données actuellement supportés sont entiers, virgules flottantes, chaînes et booléens.

Un opérateur travaille avec un ou deux opérandes. Un opérateur a des attentes quant au type de donnée de ses opérandes. Donner un type de donnée inattendu à un opérateur provoque une erreur de syntaxe. La bibliothèque sait convertir les types de données, celui qui est préféré est toujours le type spécifié par « param » et dans le cas d’expressions avec des nombres et des virgules flottantes, la virgule flottante est préférée.

Les opérateurs prenant deux opérandes sont « and », « or », « eq », « ne », « le », « lt », « ge », « gt », « =~ », « !~ ». Les opérateurs avec un nom alphabétique ont des synonymes comme ceux du langage C : « && », « || », « == », « != », « < », « ⇐ », « >= » et « > ».

« ! » est le seul opérateur qui prend un opérande. Si aucun opérande n’est spécifié, l’expression est vraie si param ou holder ne sont pas vides. Par exemple, « --filter NOM » retournera les lignes où la colonne NOM n’est pas vide.

« =~ » et « !~ » sont pour la correspondance des expressions régulières ; si une chaîne à droite correspond (ou ne correspond pas pour « !~ ») à une expression régulière du côté gauche, le résultat est vrai. L’opérande de droite doit être une chaîne littérale.

L’ordre des opérations entre les opérateurs est « or », « and » et « eq », « ne », « le », « gt », « ge », « =~ », « !~ », « not ».

About float and integer typed values, the filter engine supports only non-negative numbers. The integer is unsigned 64-bit number, and float is long double. The integer may be followed by the multiplicative suffixes KiB, GiB, TiB, PiB, EiB, ZiB, and YiB (the "iB" is optional, e.g., "K" has the same meaning as "KiB").

Karel Zak <kzak@redhat.com>

Based on original implementation from Masatake YAMATO <yamato@redhat.com>.

Pour signaler un bogue, utilisez le gestionnaire de bogues https://github.com/util-linux/util-linux/issues.

La bibliothèque libsmartcols fait partie du paquet util-linux depuis la version 2.25. Elle est disponible sur l’archive du noyau Linux https://www.kernel.org/pub/linux/utils/util-linux/.

2025-03-29 util-linux 2.41