SCOLS-FILTER(5) File formats and conventions SCOLS-FILTER(5)

scols-filter - نحو و قالب عبارات فیلتر برای ابزارهای 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: integer
      | float
      | string
      | boolean
      | holder
integer: [0-9]*
      | [0-9]*[KMGTPEZY]
      | [0-9]*[KMGTPEZY]iB
float: integer.integer
boolean: "true" | "false" | "TRUE" | "FALSE"
string: "[^\n\"]*" | '[^\n\']*'
holder: [a-zA-Z][a-zA-Z_.%:/\-0-9]*

عبارت فیلتر می‌تواند توسط برنامه‌های لینک‌شده با libsmartcols برای فیلتر کردن داده‌های خروجی استفاده شود. برنامه می‌تواند پیش از گردآوری همهٔ داده‌ها برای خروجی، از این فیلتر استفاده کند تا مصرف منابع کاهش یافته و کارایی بهبود یابد. این امر فیلتر scols را نسبت به اجرای grep(1) بر روی خروجی کامل مؤثرتر می‌سازد. به عنوان مثال:

lsblk --output NAME,LABEL,FSTYPE --filter 'NAME=="sda1"'

به lsblk(1) کمک می‌کند تا LABELها را برای همهٔ دستگاه‌های بلوکی از udevd یا libblkid نخواند، بلکه آن را تنها برای دستگاه sda1 بخواند.

فیلتر همچنین می‌تواند برای ستون‌هایی که در خروجی استفاده نشده‌اند نیز به کار رود.

یک عبارت از نگه‌دارنده‌ها (holders)، پارامترها (params) و عملگرها (operators) تشکیل می‌شود.

نوع holder که در حال حاضر پشتیبانی می‌شود تنها نام ستون است. این نام باید بدون علامت نقل‌قول استفاده شود. پیش از ارزیابی، برنامه نام‌های ستون‌ها در عبارت داده‌شده را به ستون‌های جدول خروجی نگاشت کرده و نوع دادهٔ ستون را به نگه‌دارنده (holder) اختصاص می‌دهد. نوع پیش‌فرض "string" است.

مفهوم param برای نمایش مستقیم یک مقدار است. انواع داده‌ای که در حال حاضر پشتیبانی می‌شوند عبارتند از: integer (عدد صحیح)، float (عدد اعشاری)، string (رشته) و boolean (بولی).

یک عملگر با یک یا دو عملوند کار می‌کند. یک عملگر انتظاری دربارهٔ نوع دادهٔ عملوندهای خود دارد. دادن نوع دادهٔ غیرمنتظره به یک عملگر باعث خطای نحوی می‌شود. کتابخانه می‌تواند تبدیل نوع بین انواع داده را انجام دهد؛ نوع ترجیحی همواره نوعی است که توسط param مشخص شده و در مورد عبارت دارای عدد صحیح و اعشاری، نوع ترجیحی اعشاری (float) است.

عملگرهایی که دو عملوند می‌گیرند عبارتند از and، or، eq، ne، le، lt، ge، gt، =~ و !~. عملگرهای نام‌گذاری‌شده با حروف دارای نام‌های مستعار به سبک زبان C هستند: &&، ||، ==، !=، <، ⇐، >= و >.

عملگر ! تنها عملگری است که یک عملوند می‌گیرد. اگر هیچ عملگری مشخص نشده باشد، در صورتی که param یا holder خالی نباشند، عبارت درست (true) خواهد بود. برای مثال --filter NAME خطوطی را بازمی‌گرداند که در آن‌ها ستون NAME خالی نیست.

عملگرهای =~ و !~ برای تطبیق عبارت منظم هستند؛ اگر رشتهٔ سمت راست با عبارت منظم سمت چپ مطابقت داشته باشد (یا برای !~ مطابقت نداشته باشد)، نتیجه درست (true) است. عملوند سمت راست باید یک رشتهٔ تحت‌اللفظی (string literal) باشد.

اولویت عملگرها به این ترتیب است: or، and و eq، ne، le، gt، ge، =~، !~، not.

در مورد مقادیر از نوع float و integer، موتور فیلتر تنها از اعداد غیرمنفی پشتیبانی می‌کند. integer یک عدد ۶۴ بیتی بدون علامت است و float از نوع long double می‌باشد. ممکن است پس از integer پسوندهای ضربی KiB، GiB، TiB، PiB، EiB، ZiB و YiB بیاید ("iB" اختیاری است، به عنوان مثال "K" همان معنای "KiB" را دارد).

Karel Zak <kzak@redhat.com>

بر اساس پیاده‌سازی اولیه از Masatake YAMATO <yamato@redhat.com>.

برای گزارش باگ‌ها، از سامانه پیگیری مشکلات https://github.com/util-linux/util-linux/issues.

کتابخانهٔ libsmartcols از نسخهٔ 2.25 بخشی از بستهٔ util-linux است. می‌توان آن را از بایگانی هسته لینوکس https://www.kernel.org/pub/linux/utils/util-linux. دریافت کرد.

2026-09-02 util-linux 2.42.3