| PCRE2GREP(1) | General Commands Manual | PCRE2GREP(1) |
نام (NAME)
pcre2grep - جستجوی الگوهای سازگار با پرل در فایلها
خلاصه دستور (SYNOPSIS)
pcre2grep [گزینهها] [گزینههای طولانی] [الگو] [مسیر۱ مسیر۲ ...]
توضیحات (DESCRIPTION)
دستور pcre2grep همانند سایر دستورات grep فایلها را برای الگوهای نویسهای (کاراکتری) جستجو میکند، اما از کتابخانه عبارتهای باقاعده PCRE2 برای پشتیبانی از الگوهای سازگار با عبارتهای باقاعده پرل ۵ (Perl 5) بهره میبرد. برای خلاصهای مرجع و سریع از نحو نگارش الگوها، به pcre2syntax(3) و برای شرح کامل نحو و معناشناسی عبارتهای باقاعدهای که PCRE2 پشتیبانی میکند، به pcre2pattern(3) مراجعه کنید.
الگوها، چه در خط فرمان ارائه شوند و چه در یک فایل مجزا، بدون نویسههای تحدیدکننده (delimiters) مشخص میشوند. برای مثال:
pcre2grep Thursday /etc/motd
اگر تلاش کنید از نویسههای تحدیدکننده استفاده کنید (برای مثال، با قرار دادن الگو درون اسلشها، همانطور که در اسکریپتهای پرل رایج است)، آنها به عنوان بخشی از الگو تفسیر میشوند. البته میتوان برای تحدید الگوها در خط فرمان از علامتهای نقلقول (کوتیشن) استفاده کرد، زیرا آنها توسط پوسته (شل) تفسیر میشوند، و در واقع اگر یک الگو حاوی فاصله خالی یا فراکاراکترهای پوسته (shell metacharacters) باشد، استفاده از نقلقول الزامی است.
نخستین آرگومانی که پس از تنظیمات گزینهها میآید، در صورتی که هیچیک از گزینههای -e یا -f وجود نداشته باشد، به عنوان تکالگوی مورد تطبیق در نظر گرفته میشود. برعکس، هنگامی که از یک یا هر دوی این گزینهها برای تعیین الگوها استفاده میشود، با تمام آرگومانها به عنوان نام مسیر رفتار میشود. حداقل یکی از گزینههای -e، -f یا یک آرگومان الگو باید ارائه شود.
اگر هیچ فایلی مشخص نشود، pcre2grep ورودی استاندارد را میخواند. ورودی استاندارد همچنین میتواند با نامی متشکل از یک خط تیره منفرد ارجاع داده شود. برای مثال:
pcre2grep some-pattern file1 - file3
بهطور پیشفرض، فایلهای ورودی خط به خط جستجو میشوند، بنابراین ادعاهای الگو در مورد ابتدا و انتهای یک رشته هدف (^، $، \A، \Z، و \z) در ابتدا و انتهای هر خط مطابقت مییابند. هنگامی که یک خط با الگویی تطابق پیدا کند، در خروجی استاندارد کپی میشود، و اگر بیش از یک فایل وجود داشته باشد، نام فایل در ابتدای هر خط ظاهر شده و به دنبال آن یک دونقطه (:) قرار میگیرد. با این حال، گزینههایی وجود دارند که میتوانند نحوه رفتار pcre2grep را تغییر دهند. برای مثال، گزینه -M جستجو برای رشتههایی را که فراتر از مرزهای خط امتداد دارند امکانپذیر میسازد. آنچه که مرز خط را تعریف میکند توسط گزینه -N (--newline) کنترل میشود. گزینههای -h و -H نمایش یا عدم نمایش نام فایلها را کنترل میکنند، و گزینه -Z جداکننده نام فایل را به یک بایت صفر تغییر میدهد.
مقدار حافظه مورد استفاده برای بافر کردن فایلهایی که اسکن میشوند، توسط پارامترهایی کنترل میشود که با گزینههای --buffer-size و --max-buffer-size قابل تنظیم هستند. نخستین گزینه اندازه بافری را تعیین میکند که در ابتدای پردازش تخصیص مییابد. اگر یک فایل ورودی حاوی خطوط بسیار طولانی باشد، ممکن است به بافر بزرگتری نیاز باشد؛ این موضوع با افزایش خودکار بافر، تا سقف مشخصشده توسط --max-buffer-size مدیریت میشود. مقادیر پیشفرض برای این پارامترها میتواند هنگام ساخت pcre2grep تعیین شود؛ در صورتی که چیزی مشخص نشده باشد، مقادیر پیشفرض به ترتیب 20KiB و 1MiB تنظیم میشوند. اگر خطی بیش از حد طولانی باشد و بافر دیگر قابل توسعه نباشد، خطایی رخ میدهد.
بلوک حافظهای که در عمل استفاده میشود سه برابر «اندازه بافر» است تا امکان بافر کردن خطوط «قبل» و «بعد» فراهم شود. اگر اندازه بافر بیش از حد کوچک باشد، ممکن است تعداد خطوط قبل و بعدِ کمتری نسبت به مقدار درخواستی در خروجی چاپ شود.
هنگام تطبیق با یک الگوی چندخطی، اندازه بافر باید حداقل نیمی از حداکثر تطابق مورد انتظار باشد، در غیر این صورت الگو ممکن است در تطبیق شکست بخورد.
طول الگوها نمیتواند بیشتر از 8KiB یا مقدار بایتهای BUFSIZ (هر کدام که بزرگتر باشد) باشد. مقدار BUFSIZ در <stdio.h> تعریف شده است. هنگامی که بیش از یک الگو وجود دارد (که با استفاده از -e و/یا -f مشخص شدهاند)، هر الگو به همان ترتیبی که تعریف شده است بر روی هر خط اعمال میشود، به جز اینکه تمام الگوهای -e پیش از الگوهای -f آزمایش میشوند.
بهطور پیشفرض، به محض اینکه یک الگو با خطی مطابقت پیدا کند، الگوهای بعدی دیگر بررسی نمیشوند. با این حال، اگر از --colour (یا --color) برای رنگی کردن زیررشتههای منطبق استفاده شود، یا اگر از --only-matching، --file-offsets، --line-offsets یا --output برای نمایش تنها بخشی از خط که مطابقت داشته (خواه به صورت متنی یا به عنوان یک موقعیت/آفست) استفاده شود، رفتار متفاوت خواهد بود. در این وضعیت، تمام الگوها بر روی خط اعمال میشوند. اگر بیش از یک تطابق وجود داشته باشد، آن تطابقی که نزدیکتر به ابتدای سوژه شروع شده است پردازش میشود؛ اگر بیش از یک تطابق در آن موقعیت وجود داشته باشد، موردی که دارای طولانیترین زیررشته منطبق است پردازش میشود؛ و اگر طول زیررشتههای منطبق برابر باشد، نخستین تطابق یافتشده پردازش میشود.
اسکن با تمام الگوها بلافاصله پس از تطابق یافتشده از سر گرفته میشود، تا تطابقهای بعدی در همان خط پیدا شوند. با این حال توجه داشته باشید که تطابق همپوشانیکنندهای که از میانه یک تطابق دیگر آغاز شود، پردازش نخواهد شد.
رفتار فوق در نسخه 10.41 تغییر یافت تا سازگاری بیشتری با GNU grep داشته باشد. در نسخههای پیشین، pcre2grep تطابقهای ناشی از الگوهای بعدی را که در موقعیت زودتری از سوژه قرار داشتند، تشخیص نمیداد.
الگوهایی که میتوانند با یک رشته خالی مطابقت داشته باشند پذیرفته میشوند، اما تطابقهای رشته خالی هرگز شناسایی نمیشوند. یک مثال، الگوی "(super)?(man)?" است که در آن تمام مؤلفهها اختیاری هستند. این الگو تمام رخدادهای هر دو عبارت "super" و "man" را پیدا میکند؛ خروجی این الگو با تطبیق با "super|man" هنگامی که تنها زیررشتههای منطبق نمایش داده میشوند، متفاوت است.
اگر متغیر محیطی LC_ALL یا LC_CTYPE تنظیم شده باشد، pcre2grep هنگام فراخوانی کتابخانه PCRE2 از این مقدار برای تنظیم محلی (locale) استفاده میکند. گزینه --locale میتواند برای لغو و بازنویسی این مقدار به کار رود.
پشتیبانی از فایلهای فشرده (SUPPORT FOR COMPRESSED FILES)
گزینههای زمان کامپایل برای pcre2grep میتوانند آن را برای استفاده از libz یا libbz2 جهت خواندن فایلهای فشردهای که نام آنها به ترتیب به .gz یا .bz2 ختم میشود آماده سازند. با اجرای برنامه همراه با گزینه --help میتوانید دریابید که آیا باینری pcre2grep شما از یک یا هر دوی این نوع فایلها پشتیبانی میکند یا خیر. اگر پشتیبانی مناسب وجود نداشته باشد، با تمام فایلها به عنوان متن ساده رفتار میشود. با ورودی استاندارد همواره به صورت متن ساده رفتار میشود. اگر فایلی با پسوند .gz یا .bz2 در عمل فشرده نباشد، به عنوان یک فایل متنی ساده خوانده میشود. هنگامی که ورودی از یک فایل فشرده .gz یا .bz2 دریافت میشود، گزینه --line-buffered نادیده گرفته میشود.
فایلهای دودویی (BINARY FILES)
بهطور پیشفرض، فایلی که در ۱۰۲۴ بایت اول خود حاوی یک بایت صفر دودویی باشد، به عنوان فایل دودویی (باینری) شناسایی شده و به صورت ویژه پردازش میشود. با این حال، اگر نوع خط جدید به عنوان NUL مشخص شده باشد (یعنی جداکننده خط یک صفر دودویی باشد)، آزمون تشخیص فایل دودویی اعمال نمیشود. برای مشاهده روشهای تغییر نحوه مدیریت فایلهای دودویی، به گزینه --binary-files مراجعه کنید.
صفر دودویی در الگوها (BINARY ZEROS IN PATTERNS)
الگوهایی که از خط فرمان ارسال میشوند رشتههایی هستند که با یک صفر دودویی پایان مییابند، بنابراین نمیتوانند حاوی صفرهای داخلی باشند. با این حال، الگوهایی که از طریق گزینه -f از یک فایل خوانده میشوند میتوانند حاوی صفرهای دودویی باشند.
گزینهها (OPTIONS)
ترتیبی که برخی از گزینهها در آن ظاهر میشوند میتواند بر خروجی تأثیر بگذارد. برای مثال، هر دو گزینه -H و -l بر چاپ نام فایلها اثر میگذارند. هر کدام که در خط فرمان دیرتر بیاید، اعمال خواهد شد. به طور مشابه، به جز در مواردی که در ادامه ذکر شده است، اگر یک گزینه دو بار داده شود، تنظیمی که دیرتر آمده استفاده میشود. مقادیر عددی برای گزینهها میتوانند با K یا M دنبال شوند تا به ترتیب ضرب در ۱۰۲۴ یا ۱۰۲۴*۱۰۲۴ را نشان دهند.
- --
- پایان فهرست گزینهها را مشخص میکند. این گزینه زمانی مفید است که مورد بعدی در خط فرمان با خط تیره شروع شود اما یک گزینه نباشد. این کار امکان پردازش الگوها و نام فایلهایی را که با خط تیره آغاز میشوند فراهم میآورد.
- -A number, --after-context=number
- تا سقف number خط از متن حاشیه را پس از هر خط منطبق نمایش میدهد. اگر تطابق بعدی یا پایان فایل فرا برسد، یا اگر اندازه بافر پردازش بیش از حد کوچک تنظیم شده باشد، خطوط کمتری چاپ میشود. اگر نام فایلها و/یا شماره خطوط در حال چاپ باشند، برای خطوط متنی حاشیه به جای دونقطه از یک جداکننده خط تیره استفاده میشود (از گزینه -Z میتوان برای تغییر جداکننده نام فایل به بایت صفر استفاده کرد). یک خط حاوی "--" میان هر گروه از خطوط چاپ میشود، مگر اینکه آنها در فایل ورودی واقعاً متوالی باشند. انتظار میرود مقدار number نسبتاً کوچک باشد. هنگامی که از -c استفاده شود، -A نادیده گرفته میشود.
- -a, --text
- با فایلهای دودویی مانند متن رفتار میکند. این معادل با --binary-files=text است.
- --allow-lookaround-bsk
- اکنون PCRE2 مطابق با پرل، استفاده از \K را در ارزیابیهای نگاهبهاطراف (lookarounds) بهطور پیشفرض ممنوع کرده است. این گزینه باعث میشود که pcre2grep گزینه PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK را تنظیم کند، که این استفاده تا حدی خطرناک را فعال میسازد.
- -B number, --before-context=number
- تا سقف number خط از متن حاشیه را قبل از هر خط منطبق نمایش میدهد. اگر تطابق قبلی یا ابتدای فایل در فاصله کمتر از number خط باشد، یا اگر اندازه بافر پردازش بیش از حد کوچک تنظیم شده باشد، خطوط کمتری چاپ میشود. اگر نام فایلها و/یا شماره خطوط در حال چاپ باشند، برای خطوط متنی حاشیه به جای دونقطه از یک جداکننده خط تیره استفاده میشود (از گزینه -Z میتوان برای تغییر جداکننده نام فایل به بایت صفر استفاده کرد). یک خط حاوی "--" میان هر گروه از خطوط چاپ میشود، مگر اینکه آنها در فایل ورودی متوالی باشند. انتظار میرود مقدار number نسبتاً کوچک باشد. هنگامی که از -c استفاده شود، -B نادیده گرفته میشود.
- --binary-files=word
- نحوه پردازش فایلهای دودویی را مشخص میکند. اگر این کلمه "binary" باشد (حالت پیشفرض)، تطبیق الگو روی فایلهای دودویی انجام میشود، اما در صورت موفقیت تطبیق، تنها خروجی عبارت "Binary file <name> matches" خواهد بود. اگر کلمه "text" باشد، که معادل با گزینه -a یا --text است، با فایلهای دودویی همانند هر فایل دیگری رفتار میشود. در این حالت، در صورت تطابق، خروجی ممکن است دادههای دودویی نامفهوم باشد که در صورت ارسال به ترمینال اثرات نامطلوبی در پی دارد. اگر کلمه "without-match" باشد، که معادل با گزینه -I است، فایلهای دودویی اصلاً پردازش نمیشوند؛ فرض میشود که این فایلها مورد نظر نیستند و بدون تولید هیچ خروجی یا تأثیر بر کد بازگشتی، نادیده گرفته میشوند.
- --buffer-size=number
- پارامتری را تنظیم میکند که میزان حافظه تخصیصیافته در ابتدای پردازش را برای بافر کردن فایلهای در حال اسکن کنترل میکند. همچنین به --max-buffer-size در زیر مراجعه کنید.
- -C number, --context=number
- تعداد number خط از متن حاشیه را هم قبل و هم بعد از هر خط منطبق نمایش میدهد. این معادل تنظیم همزمان -A و -B روی یک مقدار یکسان است.
- -c, --count
- خطوط
فایلهای
در حال اسکن
را چاپ
نمیکند؛
در عوض
تعداد
خطوطی را
چاپ میکند
که مطابقت
داشتهاند،
یا اگر -v
تنظیم شده
باشد،
خطوطی که
مطابقت
نداشتهاند.
به طور
پیشفرض،
این شمارش
دقیقاً
برابر با
تعداد
خطوطی است
که نمایش
داده
میشد، اما
اگر گزینه
-M (چندخطی)
استفاده
شود (بدون
-v)، ممکن
است تعداد
خطوط
نادیدهگرفتهشده
بیشتر از
این شمارش
باشد (یعنی
تعداد
تطابقها).
اگر هیچ خطی انتخاب نشود، عدد صفر چاپ میشود. اگر چندین فایل در حال اسکن باشند، برای هر یک از آنها یک شمارش چاپ میشود و میتوان از گزینه -t برای چاپ مجموع کل در انتها استفاده کرد. با این حال، اگر از گزینه --files-with-matches نیز استفاده شود، تنها فایلهایی فهرست میشوند که شمارش آنها بیشتر از صفر باشد. هنگامی که از -c استفاده میشود، گزینههای -A، -B، و -C نادیده گرفته میشوند.
- --colour, --color
- اگر این گزینه بدون هیچ دادهای ارائه شود، معادل "--colour=auto" است. در صورتی که داده نیاز باشد، باید در همان بخش پوسته و با یک علامت مساوی جدا شود.
- --colour=value, --color=value
- این گزینه
شرایطی را
تعیین
میکند که
بخشهای
منطبق با یک
الگو در
خروجی رنگی
شوند. در
صورت تنظیم
--file-offsets، --line-offsets،
یا --output
نادیده
گرفته
میشود. به
طور
پیشفرض،
خروجی رنگی
نمیشود.
مقدار برای
گزینه --colour (که
اختیاری
است، به
بالا نگاه
کنید)
میتواند
"never"، "always"، یا
"auto" باشد. در
حالت آخر،
رنگآمیزی
تنها در
صورتی رخ
میدهد که
خروجی
استاندارد
به یک
ترمینال
متصل باشد.
هنگامی که
رنگآمیزی
فعال باشد،
منابع
بیشتری
مصرف
میشود،
زیرا pcre2grep
برای
رنگآمیزی
همه آنها
باید به
دنبال تمام
تطابقهای
ممکن در یک
خط بگردد،
نه فقط یکی.
رنگ مورد استفاده میتواند با تنظیم یکی از متغیرهای محیطی PCRE2GREP_COLOUR، PCRE2GREP_COLOR، PCREGREP_COLOUR یا PCREGREP_COLOR (به ترتیبی که ذکر شد) مشخص شود. اگر هیچیک از اینها تنظیم نشده باشند، pcre2grep به دنبال GREP_COLORS یا GREP_COLOR (به این ترتیب) میگردد. مقدار متغیر باید رشتهای از دو عدد باشد که با یک نقطه ویرگول از هم جدا شدهاند، به جز در مورد GREP_COLORS که باید با "ms=" یا "mt=" شروع شود و به دنبال آن دو رنگ جداشده با نقطه ویرگول قرار گیرد و با انتهای رشته یا دونقطه پایان یابد. اگر GREP_COLORS با "ms=" یا "mt=" شروع نشود، نادیده گرفته شده و GREP_COLOR بررسی میشود.
اگر رشته به دست آمده از یکی از متغیرهای فوق حاوی هر نویسهای غیر از نقطه ویرگول یا ارقام باشد، تنظیم نادیده گرفته شده و رنگ پیشفرض استفاده میشود. این رشته مستقیماً در رشته کنترل تنظیم رنگ ترمینال کپی میشود، بنابراین اطمینان از معنادار بودن مقادیر بر عهده شماست. اگر متغیر محیطی مربوطه تنظیم نشده باشد، مقدار پیشفرض "1;31" است که رنگ قرمز تولید میکند.
- -D action, --devices=action
- اگر مسیر ورودی یک فایل معمولی یا یک دایرکتوری نباشد، "action" مشخص میکند که چگونه باید پردازش شود. مقادیر معتبر عبارتند از "read" (پیشفرض) یا "skip" (صرفنظر کردن بدون پیام از مسیر).
- -d action, --directories=action
- اگر مسیر ورودی یک دایرکتوری باشد، "action" مشخص میکند که چگونه باید پردازش شود. مقادیر معتبر عبارتند از "read" (پیشفرض در محیطهای غیرویندوزی جهت سازگاری با GNU grep)، "recurse" (معادل گزینه -r)، یا "skip" (صرفنظر کردن بدون پیام، حالت پیشفرض در ویندوز). در حالت "read"، با دایرکتوریها مانند فایلهای معمولی رفتار میشود؛ در برخی سیستمهای عامل خواندن یک دایرکتوری به این شکل منجر به رسیدن فوری به پایان فایل میشود؛ در برخی دیگر ممکن است باعث بروز خطا گردد.
- --depth-limit=number
- به --match-limit در زیر مراجعه کنید.
- -E, --case-restrict
- هنگامی که تمایز حروف کوچک و بزرگ در حالت یونیکد نادیده گرفته میشود، دو حرف اسکی (K و S) به طور پیشفرض به ترتیب با نویسههای یونیکد U+212A (علامت کلوین) و U+017F (S کشیده) و همچنین معادلهای کوچک اسکی آنها مطابقت مییابند. هنگامی که این گزینه تنظیم شود، همارزی حروف به گونهای محدود میشود که هیچ نویسه اسکی با نویسه غیر اسکی تطابق نیابد، و برعکس.
- -e pattern, --regex=pattern, --regexp=pattern
- الگوی مورد
تطبیق را
مشخص
میکند. این
گزینه
میتواند
چندین بار
برای مشخص
کردن چندین
الگو
استفاده
شود. همچنین
میتواند
روشی برای
مشخص کردن
یک تکالگو
باشد که با
خط تیره
آغاز
میشود.
هنگامی که
از -e
استفاده
میشود،
هیچ
آرگومان
الگویی از
خط فرمان
دریافت
نمیشود؛
با تمام
آرگومانها
به عنوان
نام فایل
رفتار
میشود. هیچ
محدودیتی
در تعداد
الگوها
وجود ندارد.
آنها به
همان
ترتیبی که
تعریف
شدهاند بر
هر خط اعمال
میشوند.
اگر -f همراه با -e استفاده شود، الگوهای خط فرمان ابتدا تطبیق داده میشوند و به دنبال آن الگوهای فایل(ها) بررسی میشوند، صرفنظر از ترتیبی که این گزینهها در آن مشخص شدهاند.
- --exclude=pattern
- فایلهایی (نه دایرکتوریها) که نام آنها با الگو مطابقت داشته باشد بدون پردازش نادیده گرفته میشوند. این مورد برای تمام فایلها اعمال میشود، چه در خط فرمان فهرست شده باشند، چه از طریق --file-list دریافت شوند، یا از طریق پیمایش یک دایرکتوری به دست آیند. الگو یک عبارت باقاعده PCRE2 است و با بخش نهایی نام فایل تطبیق داده میشود، نه کل مسیر. گزینههای -F، -w و -x بر این الگو اعمال نمیشوند. این گزینه میتواند هر چند بار که لازم است برای مشخص کردن چندین الگو تکرار شود. اگر نام یک فایل هم با الگوی --include و هم با --exclude مطابقت داشته باشد، مستثنی شده و نادیده گرفته میشود. این گزینه فرم کوتاه ندارد.
- --exclude-from=filename
- با هر خط غیرخالی فایل به عنوان داده برای یک گزینه --exclude رفتار میکند. آنچه خط جدید را هنگام خواندن فایل تشکیل میدهد پیشفرض سیستمعامل است. گزینه --newline تأثیری بر این گزینه ندارد. این گزینه میتواند بیش از یک بار برای مشخص کردن تعدادی فایل جهت خواندن ارائه شود.
- --exclude-dir=pattern
- دایرکتوریهایی که نام آنها با الگو مطابقت دارد، صرفنظر از تنظیم گزینه --recursive، بدون پردازش نادیده گرفته میشوند. این مورد برای تمام دایرکتوریها اعمال میشود، چه در خط فرمان فهرست شده باشند، چه از --file-list دریافت شوند یا با پیمایش یک دایرکتوری والد پیدا شوند. الگو یک عبارت باقاعده PCRE2 است و با بخش نهایی نام دایرکتوری مطابقت داده میشود، نه کل مسیر. گزینههای -F، -w و -x بر این الگو اعمال نمیشوند. این گزینه میتواند هر چند بار که لازم است برای تعیین بیش از یک الگو تکرار شود. اگر یک دایرکتوری هم با --include-dir و هم با --exclude-dir تطابق داشته باشد، مستثنی میشود. این گزینه فرم کوتاه ندارد.
- -F, --fixed-strings
- هر الگوی تطبیق داده را به جای یک عبارت باقاعده، به عنوان فهرستی از رشتههای ثابت تفسیر میکند که با خطوط جدید از هم جدا شدهاند. آنچه به عنوان خط جدید برای این منظور تلقی میشود توسط گزینه --newline کنترل میشود. گزینههای -w (تطبیق به عنوان یک کلمه) و -x (تطبیق کل خط) میتوانند همراه با -F استفاده شوند. آنها بر هر یک از رشتههای ثابت اعمال میگردند. اگر هر یک از رشتههای ثابت در یک خط پیدا شود، آن خط انتخاب میشود (مشروط به اعمال -w یا -x، در صورت وجود). این گزینه فقط بر الگوهایی اعمال میشود که در برابر محتوای فایلها تطبیق داده میشوند؛ بر الگوهای مشخصشده توسط هر یک از گزینههای --include یا --exclude اعمال نمیشود.
- -f filename, --file=filename
- الگوها را
از فایل، یک
مورد در هر
خط،
میخواند.
همانند
الگوها در
خط فرمان،
نباید از
تحدیدکنندهها
استفاده
شود. آنچه
به عنوان خط
جدید هنگام
خواندن
فایل تلقی
میشود،
تفسیر
پیشفرض
سیستمعامل
از \n است.
گزینه --newline
اثری بر این
گزینه
ندارد.
فاصلههای
سفید
انتهایی از
هر خط حذف
شده و خطوط
خالی
نادیده
گرفته
میشوند
مگر اینکه
گزینه --posix-pattern-file
نیز ارائه
شده باشد.
یک فایل
خالی حاوی
هیچ الگویی
نیست و
بنابراین
با هیچ چیز
تطابق پیدا
نمیکند.
الگوهایی
که بدین روش
از فایل
خوانده
میشوند
میتوانند
حاوی
صفرهای
دودویی
باشند که با
آنها به
عنوان
نویسههای
معمولی
رفتار
میشود.
اگر این گزینه بیش از یک بار داده شود، تمام فایلهای مشخصشده خوانده میشوند. اگر هر یک از الگوها با یک خط داده مطابقت داشته باشد، آن خط در خروجی چاپ میشود. نام فایل میتواند به عنوان "-" ارائه شود تا به ورودی استاندارد ارجاع دهد. هنگامی که از -f استفاده میشود، الگوهای مشخصشده در خط فرمان با استفاده از -e نیز میتوانند حضور داشته باشند؛ آنها پیش از الگوهای فایل تطبیق داده میشوند. با این حال، هیچ الگویی از خط فرمان به عنوان آرگومان پذیرفته نمیشود؛ با تمام آرگومانها به عنوان نام مسیرهای مورد جستجو رفتار میشود.
- --file-list=filename
- فهرستی از فایلها و/یا دایرکتوریهای مورد اسکن را از فایل دادهشده، یک مورد در هر خط، میخواند. آنچه به عنوان خط جدید هنگام خواندن فایل تلقی میشود پیشفرض سیستمعامل است. فاصلههای سفید انتهایی از هر خط حذف شده و خطوط خالی نادیده گرفته میشوند. این مسیرها پیش از هر مسیری که در خط فرمان فهرست شده است پردازش میشوند. نام فایل میتواند به صورت "-" داده شود تا به ورودی استاندارد ارجاع دهد. اگر هم --file و هم --file-list به صورت "-" مشخص شده باشند، الگوها ابتدا خوانده میشوند. این حالت فقط زمانی کاربرد دارد که ورودی استاندارد یک ترمینال باشد که پس از نشان دادن پایان فایل، بتوان خطوط بیشتری (فهرست فایلها) را از آن خواند. اگر این گزینه بیش از یک بار داده شود، تمام فایلهای مشخصشده خوانده میشوند.
- --file-offsets
- به جای نمایش خطوط یا بخشهایی از خطوط که مطابقت دارند، هر تطابق را به صورت موقعیت (آفست) از ابتدای فایل و طول آن نمایش میدهد که با ویرگول از هم جدا شدهاند. در این حالت، --colour هیچ اثری ندارد و هیچ متن حاشیهای نمایش داده نمیشود. به عبارت دیگر، گزینههای -A، -B و -C نادیده گرفته میشوند. اگر بیش از یک تطابق در یک خط وجود داشته باشد، هر کدام از آنها به صورت جداگانه نمایش داده میشود. این گزینه با --output، --line-offsets و --only-matching مانعةالجمع است.
- --group-separator=text
- در زمان استفاده از -A، -B یا -C، این رشته متنی را به جای دو خط تیره بین گروههای خطوط چاپ میکند. همچنین به --no-group-separator مراجعه کنید.
- -H, --with-filename
- هنگام جستجوی یک فایل منفرد، درج نام فایل را در ابتدای خطوط خروجی اجباری میکند. در این حالت به طور معمول نام فایل نمایش داده نمیشود. به طور پیشفرض، برای خطوط منطبق، نام فایل با یک دونقطه دنبال میشود؛ برای خطوط حاشیه، از یک جداکننده خط تیره استفاده میشود. از گزینه -Z میتوان برای تغییر جداکننده به بایت صفر استفاده کرد. اگر شماره خط نیز در حال چاپ باشد، بعد از نام فایل قرار میگیرد. هنگامی که گزینه -M باعث تطابق الگو با بیش از یک خط شود، فقط خط اول با نام فایل همراه خواهد بود. این گزینه گزینههای قبلی -h، -l یا -L را لغو میکند.
- -h, --no-filename
- نمایش نام فایلها را هنگام جستجوی چندین فایل سرکوب میکند. معمولاً هنگامی که چندین فایل جستجو میشوند، نام فایلها نمایش داده میشود. به طور پیشفرض، برای خطوط منطبق، نام فایل با یک دونقطه دنبال میشود؛ برای خطوط حاشیه، از جداکننده خط تیره استفاده میشود. از گزینه -Z میتوان برای تغییر جداکننده به بایت صفر استفاده کرد. اگر شماره خط نیز در حال چاپ باشد، بعد از نام فایل میآید. این گزینه گزینههای قبلی -H، -L یا -l را لغو میکند.
- --heap-limit=number
- به --match-limit در زیر مراجعه کنید.
- --help
- یک پیام راهنما چاپ میکند که جزئیات مختصری از گزینههای دستور و پشتیبانی از انواع فایلها ارائه میدهد، و سپس خارج میشود. هر چیز دیگری در خط فرمان نادیده گرفته میشود.
- -I
- فایلهای دودویی را نادیده میگیرد. این معادل با --binary-files=without-match است.
- -i, --ignore-case
- تمایز حروف کوچک و بزرگ را هنگام تطبیق الگو نادیده میگیرد. این مورد هم هنگام تطبیق نام مسیرها برای شمول یا استثنا و هم هنگام تطبیق خطوط در فایلها اعمال میشود.
- --include=pattern
- اگر هر الگوی --include مشخص شده باشد، تنها فایلهایی پردازش میشوند که نام آنها با یکی از الگوها مطابقت داشته باشد و با الگوی --exclude مطابقت نداشته باشد. این گزینه بر دایرکتوریها اثر نمیگذارد، اما برای تمام فایلها اعمال میشود، چه در خط فرمان فهرست شده باشند، چه از --file-list دریافت شوند یا با پیمایش یک دایرکتوری به دست آیند. الگو یک عبارت باقاعده PCRE2 است و با بخش نهایی نام فایل تطبیق داده میشود، نه کل مسیر. گزینههای -F، -w و -x بر این الگو اعمال نمیشوند. این گزینه میتواند به هر تعداد بار تکرار شود. اگر نام یک فایل هم با یک الگوی --include و هم با یک الگوی --exclude مطابقت داشته باشد، مستثنی خواهد شد. این گزینه فرم کوتاه ندارد.
- --include-from=filename
- با هر خط غیرخالی فایل به عنوان داده برای یک گزینه --include رفتار میکند. آنچه برای این منظور به عنوان خط جدید تلقی میشود پیشفرض سیستمعامل است. گزینه --newline اثری بر این گزینه ندارد. این گزینه میتواند هر تعداد بار تکرار شود؛ تمام فایلها خوانده میشوند.
- --include-dir=pattern
- اگر الگوهای --include-dir مشخص شده باشند، تنها دایرکتوریهایی پردازش میشوند که نام آنها با یکی از الگوها مطابقت داشته و با الگوی --exclude-dir مطابقت نداشته باشد. این مورد برای تمام دایرکتوریها اعمال میشود، چه در خط فرمان فهرست شده باشند، چه از --file-list به دست آیند یا با پیمایش یک دایرکتوری والد پیدا شوند. الگو یک عبارت باقاعده PCRE2 است و با بخش نهایی نام دایرکتوری تطبیق داده میشود، نه کل مسیر. گزینههای -F، -w و -x بر این الگو اعمال نمیشوند. این گزینه میتواند هر تعداد بار ارائه شود. اگر یک دایرکتوری هم با --include-dir و هم با --exclude-dir تطابق داشته باشد، مستثنی میشود. این گزینه فرم کوتاه ندارد.
- -L, --files-without-match
- به جای چاپ خطوط فایلها، فقط نام فایلهایی را چاپ میکند که شامل هیچ خطی که باید نمایش داده میشد نیستند. هر نام فایل یک بار، به طور پیشفرض در یک خط مجزا چاپ میشود، اما اگر گزینه -Z تنظیم شده باشد، آنها به جای خطوط جدید با بایت صفر جدا میشوند. این گزینه گزینههای قبلی -H، -h یا -l را لغو میکند.
- -l, --files-with-matches
- به جای چاپ خطوط فایلها، فقط نام فایلهای حاوی خطوطی را چاپ میکند که باید نمایش داده میشدند. هر نام فایل یک بار، در یک خط مجزا چاپ میشود، اما اگر گزینه -Z تنظیم شده باشد، با بایتهای صفر به جای خط جدید جدا میشوند. جستجو به طور معمول به محض یافتن یک خط منطبق در یک فایل متوقف میشود. با این حال، اگر گزینه -c (شمارش) نیز استفاده شود، تطبیق به منظور به دست آوردن شمارش صحیح ادامه مییابد و فایلهایی که حداقل یک تطابق دارند همراه با شمارش آنها فهرست میشوند. استفاده از این گزینه همراه با -c راهی برای جلوگیری از فهرست شدن فایلهای بدون تطابق است که در حالت استفاده از -c به تنهایی رخ میدهد. این گزینه هر یک از گزینههای قبلی -H، -h یا -L را لغو میکند.
- --label=name
- این گزینه نامی را تعیین میکند که هنگام چاپ نام فایلها، برای ورودی استاندارد استفاده شود. در صورت عدم تعیین، از "(standard input)" استفاده میشود. این گزینه فرم کوتاه ندارد.
- --line-buffered
- هنگامی که این گزینه ارائه شود، ورودیهای غیرفشرده خط به خط خوانده و پردازش میشوند و خروجی پس از هر نوشتن بلافاصله تخلیه (فلاش) میگردد. به طور پیشفرض، ورودی در قطعات بزرگ خوانده میشود، مگر اینکه pcre2grep بتواند تشخیص دهد که در حال خواندن از یک ترمینال است، که در حال حاضر این امر تنها در محیطهای شبهیونیکس یا ویندوز ممکن است. خروجی ترمینال معمولاً به طور خودکار توسط سیستمعامل تخلیه میشود. این گزینه زمانی مفید است که ورودی یا خروجی به یک لوله متصل باشد و شما نخواهید pcre2grep حجم زیادی از دادهها را بافر کند. با این حال، استفاده از آن بر کارایی تأثیر منفی میگذارد، و گزینه -M (چندخطی) دیگر کار نخواهد کرد. هنگامی که ورودی از یک فایل فشرده .gz یا .bz2 باشد، --line-buffered نادیده گرفته میشود.
- --line-offsets
- به جای نمایش خطوط یا بخشهایی از خطوط که تطابق دارند، هر تطابق را به عنوان شماره خط، آفست از ابتدای خط، و طول نمایش میدهد. شماره خط با یک دونقطه پایان مییابد (طبق معمول؛ به گزینه -n نگاه کنید)، و آفست و طول با یک ویرگول جدا میشوند. در این حالت، --colour اثری ندارد و متن حاشیهای نمایش داده نمیشود؛ یعنی گزینههای -A، -B و -C نادیده گرفته میشوند. اگر بیش از یک تطابق در یک خط وجود داشته باشد، هر کدام جداگانه نشان داده میشوند. این گزینه با --output، --file-offsets و --only-matching مانعةالجمع است.
- --locale=locale-name
- این گزینه محلی (locale) مورد استفاده برای تطبیق الگو را مشخص میکند. این گزینه مقدار موجود در متغیرهای محیطی LC_ALL یا LC_CTYPE را لغو میکند. اگر محلی مشخص نشود، پیشفرض کتابخانه PCRE2 (معمولاً محلی "C") استفاده میشود. این گزینه فرم کوتاه ندارد.
- -M, --multiline
- امکان
تطابق
الگوها با
بیش از یک
خط را فراهم
میآورد.
هنگامی که
این گزینه
تنظیم شود،
کتابخانه PCRE2
در حالت
«چندخطی»
فراخوانی
میشود و یک
تطابق مجاز
است فراتر
از انتهای
خط اولیه
ادامه
یافته و به
یک یا چند
خط بعدی
گسترش یابد.
الگوهای مورد استفاده با -M میتوانند به طور مفیدی حاوی نویسههای خط جدید واقعی و رخدادهای داخلی نویسههای ^ و $ باشند، زیرا در حالت چندخطی این موارد میتوانند با خطوط جدید داخلی تطابق یابند. از آنجا که pcre2grep چندین خط را اسکن میکند، ادعاهای \Z و \z تنها در انتهای آخرین خط فایل مطابقت مییابند. ادعای \A در ابتدای خط اول یک تطابق مطابقت پیدا میکند. این میتواند هر خطی در فایل باشد؛ لزوماً به خط اول فایل متصل نیست.
خروجی برای یک تطابق موفق ممکن است از بیش از یک خط تشکیل شود. خط اول، خطی است که تطابق در آن آغاز شده و خط آخر، خطی است که تطابق در آن پایان یافته است. اگر رشته منطبق با یک دنباله خط جدید پایان یابد، خروجی در انتهای آن خط پایان مییابد. اگر -v تنظیم شده باشد، هیچیک از خطوط در یک تطابق چندخطی در خروجی چاپ نمیشوند. به محض رسیدگی به یک تطابق، اسکن از ابتدای خط بعد از خطی که تطابق در آن پایان یافته است مجدداً آغاز میشود.
دنباله خط جدیدی که چندین خط را جدا میکند باید به عنوان بخشی از الگو تطبیق داده شود. برای مثال، برای یافتن عبارت "regular expression" در فایلی که در آن "regular" ممکن است در انتهای یک خط و "expression" در ابتدای خط بعدی باشد، میتوانید از این دستور استفاده کنید:
pcre2grep -M 'regular\s+expression' <file>
دنباله گریز \s با هر نویسه فاصله سفید، از جمله خطوط جدید، مطابقت مییابد، و با + دنبال میشود تا با فاصلههای سفید انتهایی در خط اول مطابقت داشته باشد و همچنین دنباله خط جدید دونامهای احتمالی را مدیریت کند.
محدودیتی در تعداد خطوط قابل تطبیق وجود دارد که به دلیل نحوه بافر کردن فایل ورودی توسط pcre2grep در هنگام اسکن تحمیل میشود. با یک بافر پردازشی به اندازه کافی بزرگ، این مسئله نباید مشکلی ایجاد کند.
گزینه -M هنگامی که ورودی به صورت خط به خط خوانده میشود کار نمیکند (به --line-buffered مراجعه کنید).
- -m number, --max-count=number
- پس از یافتن number خط منطبق (یا خطوط غیرمنطبق در صورتی که -v نیز تنظیم شده باشد)، پردازش را متوقف میکند. هرگونه خطوط حاشیه انتهایی پس از تطابق نهایی چاپ میشوند. در حالت چندخطی، هر تطابق چندخطی برای این منظور تنها یک خط به حساب میآید. اگر این محدودیت هنگام خواندن ورودی استاندارد از یک فایل معمولی حاصل شود، موقعیت فایل درست پس از آخرین خط منطبق باقی میماند. اگر -c نیز تنظیم شده باشد، شمارشی که در خروجی چاپ میشود هرگز بیشتر از number نخواهد بود. این گزینه در صورت استفاده با -L، -l، یا -q، یا زمانی که صرفاً وجود تطابق در یک فایل دودویی بررسی میشود، هیچ اثری ندارد.
- --match-limit=number
- پردازش
برخی از
الگوهای
عبارت
باقاعده
ممکن است
زمان بسیار
زیادی را
برای
جستجوی
تمام
رشتههای
منطبق ممکن
صرف کند.
برخی دیگر
ممکن است به
مقدار
بسیار
زیادی
حافظه نیاز
داشته
باشند. سه
گزینه وجود
دارند که
محدودیتهای
منابع را
برای تطبیق
تنظیم
میکنند.
گزینه --match-limit روشی برای محدود کردن مصرف منابع محاسباتی هنگام پردازش الگوهایی فراهم میکند که قرار نیست مطابقت پیدا کنند، اما تعداد حالات بسیار زیادی در درختهای جستجوی خود دارند. مثال کلاسیک آن الگویی است که از تکرارهای نامحدود تو در تو استفاده میکند. در داخل، PCRE2 شمارندهای دارد که با هر بار گردش در حلقه پردازش اصلی افزایش مییابد. اگر مقدار تعیینشده توسط --match-limit حاصل شود، خطایی رخ میدهد.
گزینه --heap-limit حداکثر مقدار حافظه هیپ را که میتواند برای تطبیق استفاده شود، بر حسب کیبیبایت (واحدهای ۱۰۲۴ بایتی) تعیین میکند.
گزینه --depth-limit عمق نقاط پسگرد (backtracking) تو در تو را محدود میکند، که به طور غیرمستقیم میزان حافظه مصرفی را محدود میسازد. مقدار حافظه مورد نیاز برای هر نقطه پسگرد به تعداد پرانتزهای ضبطکننده در الگو بستگی دارد، بنابراین مقدار حافظهای که پیش از فعال شدن این محدودیت مصرف میشود از الگویی به الگوی دیگر متفاوت است. این محدودیت تنها در صورتی مفید است که کوچکتر از --match-limit تنظیم شود.
فرم کوتاهی برای این گزینهها وجود ندارد. محدودیتهای پیشفرض میتوانند هنگام کامپایل کتابخانه PCRE2 تعیین شوند؛ در صورت عدم تعیین، مقادیر پیشفرض بسیار بزرگ بوده و عملاً نامحدود هستند.
- --max-buffer-size=number
- توسعه بافر پردازش را که اندازه اولیه آن میتواند توسط --buffer-size تنظیم شود، محدود میکند. حداکثر اندازه بافر بدون اعلام هشدار اجباراً نباید کوچکتر از اندازه بافر اولیه باشد.
- -N newline-type, --newline=newline-type
- شش قرارداد
مختلف برای
مشخص کردن
انتهای
خطوط در
فایلهای
اسکنشده
پشتیبانی
میشود.
برای مثال:
pcre2grep -N CRLF 'some pattern' <file>
نوع خط جدید میتواند با حروف بزرگ، کوچک، یا ترکیبی مشخص شود. اگر نوع خط جدید NUL باشد، خطوط با نویسههای صفر دودویی جدا میشوند. انواع دیگر عبارتند از دنبالههای تکنویسهای CR (بازگشت به سر خط) و LF (تغذیه خط)، دنباله دونویسهای CRLF، نوع "anycrlf" که هر سه نوع قبلی را به رسمیت میشناسد، و نوع "any" که هر دنباله پایان خط یونیکد برای پایان دادن به یک خط در نظر گرفته میشود. دنبالههای یونیکد همان سه مورد ذکر شده به علاوه VT (برگه عمودی، U+000B)، FF (تغذیه صفحه، U+000C)، NEL (خط بعدی، U+0085)، LS (جداکننده خط، U+2028)، و PS (جداکننده پاراگراف، U+2029) هستند.
هنگامی که کتابخانه PCRE2 ساخته میشود، دنباله پیشفرض پایان خط مشخص میگردد. این دنباله معمولاً دنباله استاندارد برای سیستمعامل است. مگر اینکه توسط این گزینه خلاف آن مشخص شود، pcre2grep از مقدار پیشفرض کتابخانه استفاده میکند.
این گزینه امکان استفاده از pcre2grep را برای اسکن فایلهایی که از محیطهای دیگر آمدهاند بدون نیاز به تغییر پایان خطوط آنها فراهم میآورد. اگر دادهای که اسکن میشود با قرارداد تنظیمشده توسط این گزینه مطابقت نداشته باشد، pcre2grep ممکن است رفتارهای عجیبی نشان دهد. توجه داشته باشید که این گزینه بر فایلهای مشخصشده توسط گزینههای -f، --exclude-from یا --include-from اعمال نمیشود، چرا که انتظار میرود آنها از دنباله خط جدید استاندارد سیستمعامل استفاده کنند.
- -n, --line-number
- ابتدای هر خط خروجی را با شماره خط آن در فایل، همراه با دونقطه برای خطوط منطبق یا خط تیره برای خطوط حاشیه مشخص میکند. اگر نام فایل نیز در حال چاپ باشد، قبل از شماره خط قرار میگیرد. هنگامی که گزینه -M باعث تطابق یک الگو با بیش از یک خط شود، فقط خط اول با شماره خط خود همراه خواهد بود. این گزینه در صورت استفاده از --line-offsets اجباری میشود.
- --no-group-separator
- هنگام استفاده از -A، -B یا -C، جداکنندهای بین گروههای خطوط چاپ نمیکند. حالت پیشفرض چاپ یک خط حاوی دو خط تیره است. همچنین به --group-separator مراجعه کنید.
- --no-jit
- اگر کتابخانه PCRE2 با پشتیبانی از کامپایل درجا (Just-in-Time - JIT، که تطبیق را تسریع میکند) ساخته شده باشد، pcre2grep به طور خودکار از آن استفاده میکند، مگر اینکه در زمان ساخت صراحتاً غیرفعال شده باشد. این گزینه میتواند برای غیرفعال کردن استفاده از JIT در زمان اجرا به کار رود. این ویژگی برای آزمایش و رفع اشکالات ارائه شده است و در استفاده معمولی هرگز نباید مورد نیاز باشد.
- -O text, --output=text
- هنگامی که
تطابقی
وجود دارد،
به جای چاپ
خطی که
مطابقت
داشته است،
فقط متن
مشخصشده
در این
گزینه را
چاپ میکند
که با خط
جدید
استاندارد
سیستمعامل
دنبال
میشود. در
این حالت،
--colour اثری
ندارد و هیچ
متن
حاشیهای
نمایش داده
نمیشود؛
یعنی
گزینههای
-A، -B و -C
نادیده
گرفته
میشوند.
گزینه --newline
اثری بر این
گزینه
ندارد، و
این گزینه
با --only-matching، --file-offsets
و --line-offsets
مانعةالجمع
است. با این
حال،
همانند
--only-matching، اگر
بیش از یک
تطابق در یک
خط وجود
داشته
باشد، هر یک
از آنها
باعث چاپ یک
خط در خروجی
میشود.
دنبالههای گریز که با نویسه دلار ($) شروع میشوند میتوانند برای درج محتوای بخش منطبق از خط و/یا زیررشتههای ضبطشده در متن استفاده شوند.
عبارت <digits>$ یا {<digits>}$ با زیررشته ضبطشده از عدد دهدهی دادهشده جایگزین میشود؛ &$ (یا $0 قدیمی) کل تطابق را جایگزین میکند. اگر عدد بزرگتر از تعداد زیررشتههای ضبطکننده باشد، یا اگر ضبط مقداردهی نشده باشد، جایگزینی خالی خواهد بود.
عبارت a$ با زنگ (bell)؛ b$ با پسبر (backspace)؛ e$ با فرار (escape)؛ f$ با تغذیه صفحه (form feed)؛ n$ با خط جدید (newline)؛ r$ با بازگشت به سر خط (carriage return)؛ t$ با برگه (tab)؛ v$ با برگه عمودی (vertical tab) جایگزین میشود.
عبارت o<digits>$ یا o{<digits>}$ با نویسهای جایگزین میشود که کد مبنای هشت (اکتال) دادهشده را دارد. در شکل اول، تا سه رقم اکتال پردازش میشود. هنگامی که در حالت یونیکد به ارقام بیشتری برای تعیین یک نویسه عریض نیاز باشد، باید از شکل دوم استفاده شود.
عبارت x<digits>$ یا x{<digits>}$ با نویسهای جایگزین میشود که عدد شانزدهشانزدهی (هگزادسیمال) دادهشده را نشان میدهد. در شکل اول، تا دو رقم هگزادسیمال پردازش میشود. هنگامی که در حالت یونیکد به ارقام بیشتری برای تعیین یک نویسه عریض نیاز باشد، باید از شکل دوم استفاده شود.
هر نویسه دیگری با خودش جایگزین میشود. بهویژه، $$ با یک علامت دلار منفرد جایگزین میگردد.
- -o, --only-matching
- به جای کل خط، تنها بخشی از خط را که با یک الگو مطابقت داشته است نمایش میدهد. در این حالت، هیچ متن حاشیهای نمایش داده نمیشود. به این معنی که گزینههای -A، -B و -C نادیده گرفته میشوند. اگر بیش از یک تطابق در یک خط وجود داشته باشد، هر کدام جداگانه و در یک خط خروجی مجزا نمایش داده میشوند. اگر -o با -v ترکیب شود (معکوس کردن جهت تطبیق برای یافتن خطوط غیرمنطبق)، هیچ خروجی تولید نمیشود، اما کد بازگشتی به طور مناسب تنظیم میگردد. اگر بخش منطبق از خط خالی باشد، چیزی چاپ نمیشود مگر اینکه نام فایل یا شماره خط در حال چاپ باشند، که در این حالت آنها در یک خط که در غیر این صورت خالی است نمایش داده میشوند. این گزینه با --output، --file-offsets و --line-offsets مانعةالجمع است.
- -onumber, --only-matching=number
- تنها بخشی
از خط را که
با
پرانتزهای
ضبطکننده
با شماره
دادهشده
مطابقت
داشته است
نمایش
میدهد. به
طور
پیشفرض تا
۵۰ پرانتز
ضبطکننده
پشتیبانی
میشود. این
محدودیت
میتواند
از طریق
گزینه --om-capture
تغییر یابد.
یک الگو
میتواند
شامل هر
تعداد
پرانتز
ضبطکننده
باشد، اما
تنها
مواردی که
شماره آنها
در محدوده
مجاز باشد
توسط -o
قابل
دسترسی
هستند. اگر
شماره
مشخصشده
توسط -o
بیشتر از
این
محدودیت
باشد،
خطایی رخ
میدهد.
گزینه o0- همانند -o بدون شماره است. از آنجا که این گزینهها میتوانند بدون آرگومان داده شوند (به بالا نگاه کنید)، اگر آرگومانی وجود داشته باشد، باید در همان بخش پوسته داده شود، به عنوان مثال، o3- یا only-matching=2--. نکاتی که در بالا برای حالت بدون آرگومان ذکر شد برای این گزینه نیز اعمال میشود. اگر پرانتز ضبطکننده مشخصشده در الگو وجود نداشته باشد، یا در تطابق مقداردهی نشده باشد، چیزی چاپ نمیشود مگر اینکه نام فایل یا شماره خط در حال چاپ باشند.
اگر این گزینه چندین بار داده شود، چندین زیررشته برای هر تطابق، به ترتیبی که گزینهها داده شدهاند و همگی در یک خط خروجی چاپ میشوند. برای مثال، o3 -o1 -o3- باعث میشود زیررشتههای منطبق با پرانتزهای ضبطکننده ۳ و ۱ و سپس دوباره ۳ چاپ شوند. به طور پیشفرض، هیچ جداکنندهای وجود ندارد (اما به دو گزینه بعدی نگاه کنید).
- --om-capture=number
- تعداد پرانتزهای ضبطکنندهای را که میتوانند توسط -o مورد دسترسی قرار گیرند تنظیم میکند. مقدار پیشفرض ۵۰ است.
- --om-separator=text
- یک رشته جداکننده برای رخدادهای متعدد -o مشخص میکند. مقدار پیشفرض یک رشته خالی است. رشتههای جداکننده هرگز رنگآمیزی نمیشوند.
- -P, --no-ucp
- از نسخه 10.43 به بعد، هنگامی که حالت UTF/یونیکد با -u یا -U مشخص میشود، گزینه PCRE2_UCP به طور پیشفرض استفاده میشود. این بدان معناست که کلاسهای نویسه POSIX در الگوها با چیزی فراتر از نویسههای اسکی تطابق مییابند. برای مثال، [:digit:] با هر رقم اعشاری یونیکد مطابقت دارد. گزینه --no-ucp گزینه PCRE2_UCP را غیرفعال میکند و بنابراین کلاسهای POSIX را همانند نسخههای پیشین به نویسههای اسکی محدود میسازد. توجه داشته باشید که اکنون تنظیمات گزینهای دقیقتری درون الگوها وجود دارد که کلاسهای منفرد را تحت تأثیر قرار میدهد. به عنوان مثال، در حالت UCP، دنباله (?aP) کلاس [:word:] را به حروف اسکی محدود میکند، در حالی که به \w اجازه میدهد با حروف و ارقام یونیکد تطابق یابد.
- --posix-pattern-file
- هنگامی که الگوها با گزینه -f ارائه میشوند، همانند سایر ابزارهای grep، فاصلههای انتهایی را حذف نکرده و خطوط خالی را نادیده نمیگیرد. برای حفظ سازگاری رفتار با نسخههای قدیمیتر، اگر الگوی خواندهشده با CRLF (به صورت کاراکترهای واقعی) پایان یافته باشد، هر دو کاراکتر به عنوان بخشی از آن گنجانده نخواهند شد، بنابراین اگر واقعاً نیاز به الگویی دارید که به '\r' ختم شود، از یک دنباله گریز استفاده کنید یا آن را با روش متفاوتی ارائه دهید.
- -q, --quiet
- در حالت ساکت کار میکند، یعنی به جز پیامهای خطا هیچ چیزی نمایش نمیدهد. وضعیت خروج نشان میدهد که آیا تطابقی پیدا شده است یا خیر.
- -r, --recursive
- اگر هر مسیر دادهشده یک دایرکتوری باشد، فایلهای درون آن را به صورت بازگشتی اسکن میکند و تنظیمات --include و --exclude را مد نظر قرار میدهد. به طور پیشفرض، یک دایرکتوری مانند یک فایل معمولی خوانده میشود؛ در برخی سیستمهای عامل این کار منجر به پایان فوری فایل میشود. این گزینه معادل کوتاهی برای تنظیم گزینه -d بر روی "recurse" است.
- --recursion-limit=number
- این یک معادل منسوخشده برای --depth-limit است. برای جزئیات به --match-limit در بالا مراجعه کنید.
- -s, --no-messages
- پیامهای خطا درباره فایلهای ناموجود یا غیرقابل خواندن را سرکوب میکند. از چنین فایلهایی بدون پیام صرفنظر میشود. با این حال، کد بازگشتی همچنان ۲ است، حتی اگر تطابقهایی در فایلهای دیگر پیدا شده باشد.
- -t, --total-count
- این گزینه هنگام اسکن بیش از یک فایل مفید است. اگر به تنهایی استفاده شود، -t تمام خروجیها را به جز مجموع کل خطوط منطبق (یا خطوط غیرمنطبق در صورت استفاده از -v) در تمام فایلها متوقف میکند. اگر -t همراه با -c استفاده شود، یک مجموع کل چاپ میشود مگر در حالتی که خروجی قبلی فقط یک خط باشد. به عبارت دیگر، زمانی که فقط شمارش یک فایل فهرست شده باشد، خروجی داده نمیشود. اگر نام فایلها در حال چاپ باشد، قبل از مجموع کل ":TOTAL" قرار میگیرد. در غیر این صورت، تنها به صورت یک عدد ظاهر میشود. گزینه -t هنگام استفاده با -L (فهرست کردن فایلهای بدون تطابق) نادیده گرفته میشود، زیرا مجموع کل همواره صفر خواهد بود.
- -u, --utf
- در حالت UTF/یونیکد کار میکند. این گزینه فقط در صورتی در دسترس است که PCRE2 با پشتیبانی از UTF-8 کامپایل شده باشد. تمام الگوها (از جمله الگوهای هر یک از گزینههای --exclude و --include) و تمام خطوطی که اسکن میشوند باید رشتههای معتبری از نویسههای UTF-8 باشند. در صورت مواجهه با یک رشته نامعتبر UTF-8، خطایی رخ میدهد.
- -U, --utf-allow-invalid
- همانند --utf عمل میکند، اما علاوه بر آن، خطوط سوژه میتوانند حاوی دنبالههای واحد کد نامعتبر UTF-8 باشند. این دنبالهها هرگز نمیتوانند بخشی از یک تطابق الگو را تشکیل دهند. با این حال، خود الگوها همچنان باید رشتههای معتبر UTF-8 باشند. این قابلیت امکان جستجوی رشتههای معتبر UTF-8 را در میان دنبالههای بایت دلخواه در فایلهای اجرایی یا سایر فایلهای دودویی فراهم میکند. برای جزئیات بیشتر درباره تطبیق در رشتههای غیرمعتبر UTF-8، به مستندات pcre2unicode(3) مراجعه کنید.
- -V, --version
- شماره نسخههای pcre2grep و کتابخانه PCRE2 را در خروجی استاندارد چاپ کرده و سپس خارج میشود. هر چیز دیگری در خط فرمان نادیده گرفته میشود.
- -v, --invert-match
- جهت تطابق را معکوس میکند، به گونهای که خطوطی که با هیچیک از الگوها مطابقت ندارند همان خطوطی هستند که پیدا میشوند. هنگامی که این گزینه تنظیم شود، گزینههایی مانند --only-matching و --output که بخشهایی از تطابق را برای چاپ مشخص میکنند، نادیده گرفته میشوند.
- -w, --word-regex, --word-regexp
- الگوها را مجبور میکند که فقط با "کلمات" مطابقت پیدا کنند؛ یعنی باید یک مرز کلمه در ابتدا و انتهای هر رشته منطبق وجود داشته باشد. این معادل قرار دادن "\b(?:" در ابتدای هر الگو و ")\b" در انتهای آن است. این گزینه فقط بر الگوهایی اعمال میشود که در برابر محتوای فایلها تطبیق داده میشوند؛ بر الگوهای مشخصشده توسط هیچیک از گزینههای --include یا --exclude اعمال نمیشود.
- -x, --line-regex, --line-regexp
- الگوها را مجبور میکند که فقط از ابتدای خطوط شروع به تطابق کنند و علاوه بر آن، آنها را ملزم میسازد که کل خط را تطبیق دهند. در حالت چندخطی تطابق ممکن است بیش از یک خط باشد. این معادل قرار دادن "^(?:" در ابتدای هر الگو و ")$" در انتهای آن است. این گزینه فقط بر الگوهایی اعمال میشود که در برابر محتوای فایلها تطبیق داده میشوند؛ بر الگوهای مشخصشده توسط هیچیک از گزینههای --include یا --exclude اعمال نمیشود.
- -Z, --null
- نام فایلها را در خروجی معمولی به جای نویسه معمولی با یک بایت صفر (نویسه NUL) خاتمه میدهد. این گزینه زمانی مفید است که نام فایلها حاوی نویسههای غیرمعمول مانند دونقطه، خط تیره یا حتی خطوط جدید باشد. این گزینه بر نام فایلها در پیامهای خطا اعمال نمیشود.
متغیرهای محیطی (ENVIRONMENT VARIABLES)
متغیرهای محیطی LC_ALL و LC_CTYPE به همان ترتیب برای یافتن یک محلی (locale) بررسی میشوند. نخستین متغیری که تنظیم شده باشد استفاده میشود. این مقدار میتواند توسط گزینه --locale بازنویسی شود. اگر محلی تنظیم نشده باشد، پیشفرض کتابخانه PCRE2 (معمولاً محلی "C") استفاده میشود.
خطوط جدید (NEWLINES)
گزینه -N (--newline) به pcre2grep اجازه میدهد تا فایلها را با قراردادهای خط جدیدی که متفاوت از پیشفرض هستند اسکن کند. این گزینه تنها بر نحوه پردازش فایلهای اسکنشده تأثیر میگذارد. بر تفسیر فایلهای مشخصشده توسط گزینههای -f، --file-list، --exclude-from یا --include-from تأثیری ندارد.
هر بخشی از فایلهای ورودی اسکنشده که در خروجی استاندارد نوشته میشود، با همان دنبالههای خط جدیدی که در ورودی دارند کپی میگردد. با این حال، اگر خط پایانی یک فایل چاپ شود و به یک دنباله خط جدید ختم نشده باشد، یک دنباله خط جدید افزوده میشود. اگر تنظیم خط جدید بر روی CR، LF، CRLF یا NUL باشد، همان پایان خط خروجی داده میشود؛ برای سایر تنظیمات (ANYCRLF یا ANY) یک NL منفرد استفاده میشود.
تنظیم خط جدید بر نحوه نوشتن خطوط جدید در پیامهای اطلاعرسانی به جریان خروجی استاندارد و خطای استاندارد توسط pcre2grep تأثیری ندارد. در ویندوز، خروجی استاندارد به صورت دودویی تنظیم میشود تا "\r\n" در انتهای خطوط خروجی که از ورودی کپی شدهاند توسط کتابخانه ورودی/خروجی C به "\r\r\n" تبدیل نشود. این بدان معناست که هر پیامی که در خروجی استاندارد نوشته میشود باید با "\r\n" پایان یابد. برای تمام سیستمهای عامل دیگر، و برای تمام پیامها به جریان خطای استاندارد، از "\n" استفاده میشود.
سازگاری گزینهها با GNU GREP (OPTIONS COMPATIBILITY WITH GNU GREP)
بسیاری از فرمهای کوتاه و بلند گزینههای pcre2grep مشابه برنامه GNU grep هستند. هر گزینه بلندی به فرم --xxx-regexp (اصطلاحات GNU) به صورت --xxx-regex (اصطلاحات PCRE2) نیز در دسترس است. با این حال، گزینههای --case-restrict، --depth-limit، -E، --file-list، --file-offsets، --heap-limit، --include-dir، --line-offsets، --locale، --match-limit، -M، --multiline، -N، --newline، --no-ucp، --om-separator، --output، -P، -u، --utf، -U، و --utf-allow-invalid مختص pcre2grep هستند، همانطور که استفاده از گزینه --only-matching همراه با شماره پرانتز ضبطکننده اختصاصی آن است.
اگرچه بیشتر گزینههای رایج به همان شیوه کار میکنند، اما تعداد کمی در pcre2grep متفاوت هستند. برای مثال، آرگومان گزینه --include در GNU grep یک الگوی گلوب (glob) است، اما در pcre2grep یک عبارت باقاعده است که گزینه -i بر آن اعمال میشود. اگر هر دو گزینه -c و -l داده شوند، GNU grep تنها نام فایلها را بدون شمارش فهرست میکند، اما pcre2grep شمارشها را نیز ارائه میدهد.
گزینهها همراه با داده (OPTIONS WITH DATA)
چهار روش مختلف وجود دارد که میتوان یک گزینه همراه با داده را مشخص کرد. اگر یک گزینه با فرم کوتاه استفاده شود، داده میتواند بلافاصله به دنبال آن بیاید، یا (به جز یک استثنا) در بخش بعدی خط فرمان قرار گیرد. برای مثال:
-f/some/file -f /some/file
استثنا گزینه -o است که ممکن است همراه با داده یا بدون آن ظاهر شود. به همین دلیل، اگر داده وجود داشته باشد، باید بلافاصله در همان بخش بیاید، برای مثال o3-.
اگر یک گزینه با فرم طولانی استفاده شود، داده میتواند در همان بخش خط فرمان و با نویسه مساوی جدا شود، یا (با دو استثنا) در بخش بعدی خط فرمان ظاهر گردد. برای مثال:
--file=/some/file --file /some/file
با این حال توجه داشته باشید که اگر میخواهید نام فایلی را که با ~ آغاز میشود به عنوان داده در یک دستور پوسته ارائه دهید و پوسته ~ را به دایرکتوری خانگی بسط دهد، باید نام فایل را از گزینه جدا کنید، زیرا پوسته با ~ رفتار ویژهای نخواهد داشت مگر اینکه در ابتدای یک بخش قرار داشته باشد.
استثناهای موارد فوق گزینههای --colour (یا --color) و --only-matching هستند که داده برای آنها اختیاری است. اگر یکی از این گزینهها داده داشته باشد، باید در فرم اول و با استفاده از یک نویسه مساوی ارائه شود. در غیر این صورت pcre2grep فرض میکند که دادهای ندارد.
استفاده از قابلیت فراخوانی به بیرون PCRE2 (USING PCRE2'S CALLOUT FACILITY)
دستور pcre2grep به طور پیشفرض دارای پشتیبانی از فراخوانی برنامهها یا اسکریپتهای بیرونی یا چاپ رشتههای مشخص در حین تطبیق با استفاده از قابلیت فراخوانی به بیرون (callout) کتابخانه PCRE2 است. با این حال، این پشتیبانی میتواند هنگام ساخت pcre2grep به طور کامل یا جزئی غیرفعال شود. با اجرای دستور همراه با گزینه --help میتوانید متوجه شوید که آیا باینری شما از کالاوتها پشتیبانی میکند یا خیر. اگر پشتیبانی کالاوت به طور کامل غیرفعال باشد، کالاوتها در الگوها توسط pcre2grep ممنوع هستند. اگر این قابلیت به طور جزئی غیرفعال باشد، فراخوانی برنامههای بیرونی پشتیبانی نمیشود و کالاوتهایی که آن را درخواست کنند نادیده گرفته میشوند.
یک کالاوت در الگوی PCRE2 به فرم (?C<arg>) است که در آن آرگومان یا یک عدد است یا یک رشته در نقلقول (برای جزئیات به مستندات pcre2callout مراجعه کنید). کالاوتهای شمارهدار توسط pcre2grep نادیده گرفته میشوند؛ تنها کالاوتهای دارای آرگومان رشتهای مفید هستند.
چاپ یک رشته مشخص (Echoing a specific string)
شروع کردن رشته کالاوت با یک نویسه خط عمودی (|) قابلیتی برای چاپ را فراخوانی میکند که از فراخوانی برنامه یا اسکریپت بیرونی جلوگیری مینماید. این قابلیت همواره در دسترس است، به شرط آنکه کالاوتها هنگام ساخت pcre2grep به طور کامل غیرفعال نشده باشند. باقیمانده رشته کالاوت به عنوان یک رشته منتهی به صفر پردازش میشود، بدین معنی که نباید حاوی هیچ صفر دودویی داخلی باشد. این رشته پس از عبور از پردازش گریز مشابه با متن گزینه --output (-O) (به بالا مراجعه کنید)، در خروجی نوشته میشود. با این حال، از $0 یا &$ نمیتوان برای درج زیررشته منطبق استفاده کرد زیرا تطبیق هنوز در جریان است؛ در عوض، نویسه منفرد '0' درج میشود. هرگونه خطای نحوی در رشته (برای مثال، دلاری که با نویسه دیگری دنبال نشود) باعث نادیده گرفته شدن کالاوت میشود. هیچ خاتمهدهندهای به رشته خروجی افزوده نمیشود، بنابراین اگر خط جدید میخواهید، باید صراحتاً آن را با استفاده از گریز n$ بگنجانید. برای مثال:
pcre2grep '(.)(..(.))(?C"|[$1] [$2] [$3]$n")' <some file>
پس از خروجی دادن رشته، تطبیق به طور عادی ادامه مییابند. اگر میخواهید فقط خروجی کالاوت را ببینید و هیچ خروجی ناشی از تطابق واقعی نبینید، باید الگو را با (*FAIL) پایان دهید.
فراخوانی برنامهها یا اسکریپتهای بیرونی (Calling external programs or scripts)
این قابلیت میتواند هنگام ساخت pcre2grep به طور مستقل غیرفعال شود. این امکان برای ویندوز (که در آن فراخوانی به _spawnvp() استفاده میشود)، برای VMS (که در آن lib$spawn() استفاده میشود) و برای هر محیط شبهیونیکس که در آن fork() و execv() در دسترس هستند پشتیبانی میشود.
اگر رشته کالاوت با یک نویسه خط عمودی (|) شروع نشود، به فهرستی از زیررشتهها که با نویسه خط عمودی جدا شدهاند تجزیه میشود. زیررشته اول باید نام یک فایل اجرایی باشد و زیررشتههای بعدی آرگومانها را مشخص میکنند:
executable_name|arg1|arg2|...
هر زیررشته (از جمله نام فایل اجرایی) میتواند شامل دنبالههای گریز باشد که با نویسه دلار آغاز میشوند. اینها مشابه مواردی هستند که در بالا برای گزینه --output (-O) مستند شدهاند، به جز اینکه $0 یا &$ نمیتواند رشته منطبق را درج کند زیرا تطبیق هنوز در حال انجام است. در عوض، نویسه '0' درج میشود. اگر در هر زیررشته به یک علامت دلار یا خط عمودی واقعی نیاز دارید، به ترتیب از $$ یا |$ استفاده کنید. در اینجا یک مثال آورده شده است:
echo -e "abcde\n12345" | pcre2grep \
'(?x)(.)(..(.))
(?C"/bin/echo|Arg1: [$1] [$2] [$3]|Arg2: $|${1}$| ($4)")()' -
خروجی:
Arg1: [a] [bcd] [d] Arg2: |a| () abcde Arg1: [1] [234] [4] Arg2: |1| () 12345
پارامترها برای فراخوانی سیستمی که برای اجرای برنامه یا اسکریپت استفاده میشود، رشتههای خاتمهیافته با صفر هستند. این بدان معنی است که نویسههای صفر دودویی در آرگومان کالاوت باعث پایان زودهنگام زیررشتههای آنها میشود، و بنابراین نباید وجود داشته باشند. هرگونه خطای نحوی در رشته (برای مثال، دلاری که با نویسه دیگری دنبال نشده باشد) باعث نادیده گرفته شدن کالاوت میشود. اگر اجرای برنامه به هر دلیلی با شکست مواجه شود (از جمله عدم وجود فایل اجرایی)، یک شکست تطبیق محلی رخ میدهد و موتور تطبیق به روش عادی به عقب بازمیگردد.
خطاهای تطبیق (MATCHING ERRORS)
امکان ارائه یک عبارت باقاعده وجود دارد که شکست آن در تطابق با خطوطی خاص، زمان بسیار زیادی ببرد. چنین الگوهایی معمولاً شامل تکرارهای نامحدود تو در تو هستند، برای مثال: (a+)*\d هنگامی که در برابر خطی از aها بدون هیچ رقم پایانی مطابقت داده شود. تابع تطبیق PCRE2 دارای یک محدودیت منابع است که باعث میشود در این شرایط عملیات متوقف شود. اگر این اتفاق بیفتد، pcre2grep یک پیام خطا و خطی را که باعث بروز مشکل شده است در جریان خطای استاندارد چاپ میکند. اگر بیش از ۲۰ مورد از این خطاها رخ دهد، pcre2grep متوقف میشود.
گزینه --match-limit از pcre2grep میتواند برای تنظیم محدودیت کلی منابع استفاده شود. همچنین محدودیتهای دیگری نیز وجود دارند که بر مقدار حافظه مصرفی حین تطبیق اثر میگذارند؛ به بررسی گزینههای --heap-limit و --depth-limit در بالا مراجعه کنید.
کدهای خروج (EXIT CODES)
وضعیت خروج در صورت یافتن هرگونه تطابق ۰، در صورتی که هیچ تطابقی پیدا نشود ۱، و برای خطاهای نحوی، خطوط بیش از حد طولانی، فایلهای ناموجود یا غیرقابل دسترسی (حتی اگر در فایلهای دیگر تطابق پیدا شده باشد) یا خطاهای تطبیق بسیار زیاد، ۲ است. استفاده از گزینه -s برای جلوگیری از نمایش پیامهای خطا درباره فایلهای غیرقابل دسترسی، تأثیری بر کد بازگشتی ندارد.
هنگام اجرا در محیط VMS، کد بازگشتی در نماد PCRE2GREP_RC قرار میگیرد زیرا VMS تمایزی میان exit(0) و exit(1) قائل نمیشود.
همچنین ببینید (SEE ALSO)
pcre2pattern(3), pcre2syntax(3), pcre2callout(3), pcre2unicode(3).
نویسنده (AUTHOR)
Philip Hazel Retired from University Computing Service Cambridge, England.
بازبینی (REVISION)
Last updated: 24 January 2025 Copyright (c) 1997-2023 University of Cambridge.
| 24 January 2025 | PCRE2 10.48 |