GREPDIFF(1) Man pages GREPDIFF(1)

grepdiff - نمایش فایل‌های تغییریافته توسط یک diff شامل عبارت باقاعده

grepdiff [[-n] | [--line-number]] [[-N] | [--number-files]] [[-p n] | [--strip-match=n]] [--strip=n] [--git-prefixes=strip|keep] [--git-extended-diffs=exclude|include] [--addprefix=PREFIX] [--addoldprefix=PREFIX] [--addnewprefix=PREFIX] [[-s] | [--status]] [--empty-files-as-absent] [[-i PATTERN] | [--include=PATTERN]] [[-I FILE] | [--include-from-file=FILE]] [[-x PATTERN] | [--exclude=PATTERN]] [[-X FILE] | [--exclude-from-file=FILE]] [[-# RANGE] | [--hunks=RANGE]] [--lines=RANGE] [[-FRANGE] | [--files=RANGE]] [--annotate] [--as-numbered-lines=WHEN] [--format=FORMAT] [--remove-timestamps] [[-v] | [--verbose]] [[-z] | [--decompress]] [[-E] | [--extended-regexp]] [[-H] | [--with-filename]] [[-h] | [--no-filename]] [--output-matching=WHAT] [--only-match=WHAT] {[REGEX] | [-f FILE]} [file...]

grepdiff {[--help] | [--version] | [--list] | [--filter ...]}

به ازای هر فایلی که توسط یک وصله (patch) تغییر یافته است، اگر قطعه وصله (hunk) شامل REGEX باشد، نام آن فایل چاپ می‌شود.

با عبارت باقاعده مطابق با نحو «عبارت باقاعده پایه‌ای POSIX» رفتار می‌شود، مگر اینکه گزینه -E مشخص شود که در این صورت نحو «عبارت باقاعده گسترده POSIX» به کار می‌رود. هنگامی که برنامه با پشتیبانی از PCRE2 کامپایل شده باشد، عبارات باقاعده PCRE به جای عبارات باقاعده POSIX استفاده می‌شوند و گزینه -E بی‌تأثیر خواهد بود، چرا که PCRE از قبل به طور پیش‌فرض از ویژگی‌های عبارت باقاعده گسترده پشتیبانی می‌کند.

می‌توانید از diffهای با قالب context ،unified و Git در این برنامه استفاده کنید. قالب Git شامل پشتیبانی از فایل‌های باینری، تغییر نام فایل‌ها، تغییرات حالت دسترسی (permission mode) و سایر قابلیت‌های diff مختص به Git است.

-n, --line-number

شماره خطی که هر وصله از آن آغاز می‌شود را نمایش می‌دهد. در صورتی که خروجی پرگو (verbose) درخواست شده باشد، هر قطعه (hunk) منطبق نیز فهرست می‌شود.

برای مشاهده توضیحات مربوط به قالب خروجی، lsdiff(1) را ببینید.

-N, --number-files

شماره فایل‌ها با شروع از ۱، پیش از هر نام فایل فهرست می‌شوند.

-pn, --strip-match=n

هنگام تطبیق، از n مؤلفه اول نام مسیر صرف‌نظر می‌شود.

--strip=n

پیش از نمایش نام مسیر، n مؤلفه اول آن را حذف می‌کند.

--git-prefixes=strip|keep

نحوه مدیریت پیشوندهای a/ و b/ در نام فایل‌های Git diff. مقدار strip، پیشوندها را هم برای تطبیق نام فایل (هنگام استفاده از گزینه‌های -i و -x) و هم برای خروجی نام فایل (مشابه --strip) حذف می‌کند. مقدار keep (پیش‌فرض)، رفتار فعلی را حفظ می‌کند. این مورد بر روی هر دو نوع diff ویژه Git (فایل‌های باینری، تغییر نام‌ها، تغییرات حالت) و diffهای سنتی هنگامی که بخشی از یک وصله Git هستند اعمال می‌شود. نکته: با keep، برای سازگاری با سایر عملیات Git، با عملیات رونوشت (copy) و تغییر نام طوری رفتار می‌شود که گویی دارای پیشوندهای a/ و b/ هستند. مقدار پیش‌فرض در نگارش 0.5.0 به strip تغییر خواهد کرد.

--git-extended-diffs=exclude|include

تعیین می‌کند که آیا diffهای Git بدون قطعات محتوای سنتی پردازش شوند یا خیر. این شامل تغییر نام‌ها، رونوشت‌ها، تغییرات صرفاً مربوط به حالت، و فایل‌های باینری است. با exclude (پیش‌فرض در نگارش‌های 0.4.x)، این diffها نادیده گرفته می‌شوند. با include (پیش‌فرض در نگارش‌های +0.5.0)، این diffها به طور عادی پردازش می‌شوند. این گزینه بر شماره‌گذاری فایل‌ها با -N و پالایش فایل‌ها با -F تأثیر می‌گذارد.

--addprefix=PREFIX

پیش از نمایش نام مسیر، PREFIX را به ابتدای آن اضافه می‌کند. این تنظیمات مشخص‌شده توسط گزینه‌های --addoldprefix یا --addnewprefix را لغو (override) می‌کند.

--addoldprefix=PREFIX

در خروجی، PREFIX را به ابتدای نام مسیرهای فایل‌های قدیمی یا اصلی اضافه می‌کند.

--addnewprefix=PREFIX

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

-s

موارد افزوده شدن، تغییر یافتن و حذف فایل‌ها را نشان می‌دهد. افزودن فایل با یک “+”، حذف با یک “-” و تغییر با یک “!” مشخص می‌شود.

--empty-files-as-absent

هنگام تطبیق الگوها، با فایل‌های خالی مانند فایل‌های ناموجود رفتار می‌کند.

-iPATTERN, --include=PATTERN

تنها فایل‌های منطبق با PATTERN را شامل می‌شود.

-IFILE, --include-from-file=FILE

تنها فایل‌های منطبق با هر یک از الگوهای ذکرشده در FILE (یک الگو در هر خط) را شامل می‌شود. تمام خطوط دیگر در ورودی نادیده گرفته می‌شوند.

-x PATTERN --exclude=PATTERN

فایل‌های منطبق با PATTERN را مستثنی می‌کند.

-XFILE, --exclude-from-file=FILE

فایل‌های منطبق با هر یک از الگوهای ذکرشده در FILE (یک الگو در هر خط) را مستثنی می‌کند. تمام خطوط دیگر در ورودی نمایش داده می‌شوند.

-#RANGE, --hunks=RANGE

تنها قطعات موجود در RANGE مشخص‌شده را شامل می‌شود. قطعات از ۱ شماره‌گذاری می‌شوند و بازه به صورت فهرستی از اعداد یا دامنه‌های “first-last” جداشده با کاما است که به صورت اختیاری می‌تواند یک اصلاح‌کننده 'x' در ابتدا داشته باشد که کل بازه را معکوس می‌کند؛ برای مشخص کردن نبود محدودیت در هر جهت، می‌توان مقدار اول یا آخر دامنه را حذف کرد.

--lines=RANGE

تنها قطعاتی را فهرست می‌کند که شامل خطوطی از فایل اصلی هستند که درون RANGE مشخص‌شده قرار دارند. خطوط از ۱ شماره‌گذاری می‌شوند و بازه به صورت فهرستی از اعداد یا دامنه‌های “first-last” جداشده با کاما است که به صورت اختیاری می‌تواند یک اصلاح‌کننده 'x' در ابتدا داشته باشد که کل بازه را معکوس می‌کند؛ برای مشخص کردن نبود محدودیت در هر جهت، می‌توان مقدار اول یا آخر دامنه را حذف کرد.

-F=RANGE, --files=RANGE

تنها فایل‌های مشخص‌شده توسط RANGE تعیین‌شده را فهرست می‌کند. فایل‌ها از ۱ و به ترتیبی که در ورودی وصله ظاهر می‌شوند شماره‌گذاری می‌شوند، و بازه به صورت فهرستی از اعداد یا دامنه‌های “first-last” جداشده با کاما است که به صورت اختیاری می‌تواند یک اصلاح‌کننده 'x' در ابتدا داشته باشد که کل بازه را معکوس می‌کند؛ برای مشخص کردن نبود محدودیت در هر جهت، می‌توان مقدار اول یا آخر دامنه را حذف کرد.

--annotate

هر قطعه را با نام فایل و شماره قطعه حاشیه‌نویسی می‌کند. --as-numbered-lines=before|after|original-before|original-after
به جای یک قطعه وصله، خطوط تکه‌های (hunks) انتخاب‌شده را همراه با شماره خط فایل پیش از (یا پس از) اعمال وصله، به دنبال یک نویسه TAB و یک دونقطه در ابتدای هر خط نمایش می‌دهد. هر تکه به‌جز تکه نخست، خطی متشکل از “...” پیش از خود خواهد داشت.

گزینه‌های before و after شماره خطوط را متناسب با تکه‌های نادیده‌گرفته‌شده تنظیم کرده و نمایش می‌دهند. گزینه‌های original-before و original-after شماره خطوط را همان‌گونه که در diff اصلی ظاهر شده‌اند نمایش می‌دهند و بافتار شماره خط اصلی را حفظ می‌کنند. این قابلیت برای سامانه‌های CI/CD که باید خطاها را روی شماره خطوط دقیق diff اصلی گزارش کنند، مفید است.

--format=unified|context

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

--remove-timestamps

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

-z, --decompress

فایل‌های دارای پسوند .gz و .bz2 را از حالت فشرده خارج می‌کند.

-E, --extended-regexp

از نحو عبارات باقاعده گسترش‌یافته POSIX استفاده می‌کند. نکته: در صورت کامپایل با پشتیبانی از PCRE2، این گزینه هیچ اثری ندارد زیرا عبارات باقاعده PCRE به‌طور پیش‌فرض استفاده می‌شوند و از قبل از قابلیت‌های عبارات باقاعده گسترش‌یافته پشتیبانی می‌کنند.

-H, --with-filename

نام فایل وصله حاوی هر تطابق را چاپ می‌کند.

-h, --no-filename

از چاپ نام فایل وصله حاوی هر تطابق خودداری می‌کند.

-fFILE, --file=FILE

عبارات باقاعده را از FILE، یک عبارت در هر خط، می‌خواند.

--output-matching=hunk|file

diffهای تطبیق‌یافته را در سطح تکه (hunk) یا در سطح فایل نمایش می‌دهد.

--only-match=rem|removals|add|additions|mod|modifications|all

تطبیق عبارت باقاعده را به موارد حذف‌شده، افزوده‌شده، اصلاح‌شده یا کل تکه (hunk) محدود می‌کند.

--help

پیام راهنمای کوتاهی درباره نحوه استفاده نمایش می‌دهد.

--version

شماره نسخه grepdiff را نمایش می‌دهد.

--filter

در عوض، مانند filterdiff(1) رفتار می‌کند.

--list

در عوض، مانند lsdiff(1) رفتار می‌کند.

برای شناسایی سریع فایل‌هایی در یک وصله بزرگ که حاوی تغییرات تخصیص حافظه هستند (مفید برای بازبینی کد):

grepdiff "malloc\|free\|realloc" large-patch.diff

این دستور تنها نام فایل‌ها را نمایش می‌دهد و بدون سردرگمی در محتوای diff، یک دید کلی و سریع در اختیارتان می‌گذارد.

برای مشاهده تکه‌های (hunks) واقعی حاوی الگو:

grepdiff --output-matching=hunk "malloc" patch.diff

برای مشاهده diff کامل فایل‌هایی که شامل الگو هستند:

grepdiff --output-matching=file "malloc" patch.diff

برای سامانه‌های CI/CD که به شماره خطوط منطبق با بافتار diff اصلی نیاز دارند (مفید برای گزارش خطا):

grepdiff pattern --output-matching=hunk \
  --as-numbered-lines=original-after patch.file

diffهای قالب Git به‌طور کامل پشتیبانی می‌شوند. برای نمونه، برای یافتن فایل‌هایی در یک وصله git که شامل تغییراتی در فراخوانی‌های malloc هستند:

grepdiff "malloc" git-patch.patch

توجه داشته باشید که grepdiff در محتوای تکه (تغییرات واقعی کد) جستجو می‌کند، نه در فراداده‌های Git مانند سرآیندهای تغییر نام (rename). فایل‌هایی که فقط دارای تغییر نام یا تغییر حالت دسترسی (mode) هستند (بدون هیچ تکه محتوایی)، حتی اگر الگو در سرآیندهای Git ظاهر شود، پیدا نخواهند شد..SH "همچنین ببینید (SEE ALSO)"

filterdiff(1), lsdiff(1), patchview(1)

Tim Waugh <twaugh@redhat.com>

نگه‌دارنده بسته
10 Feb 2011 patchutils