[ التمهيد | دليل المستخدم | الفهرسة | المعايير | سؤال وجواب]
الخيار -Q يفتح استعلام TUI للبحث عن الملفات أثناء الكتابة!
ugrep سريع وسهل الاستخدام ومجهز بالكثير من الميزات الجديدة التي أرادها المستخدمون
يتضمن TUI تفاعلي مع مساعدة مدمجة، وبحث يشبه Google مع أنماط AND/OR/NOT، والبحث الغامض، والبحث (المتداخل) في أرشيفات zip/7z/tar/pax/cpio، وكرات القطران والملفات المضغوطة gz/Z/bz/ bz2/lzma/xz/lz4/zstd/brotli، والبحث في الملفات الثنائية والتفريغ السداسي، والبحث في المستندات مثل PDF وdoc وdocx والإخراج بتنسيق JSON، XML أو CSV أو التنسيق المخصص الخاص بك
يقوم Unicode بتوسيع بناء جملة نمط regex مع مطابقة نمط متعدد الأسطر دون الحاجة إلى خيارات سطر أوامر خاصة
يتضمن مفهرس ملفات لتسريع عملية البحث في أنظمة الملفات البطيئة والباردة
بديل حقيقي لـ GNU grep (على افتراض أنك تقوم بالنسخ أو الارتباط الرمزي ug
بـ grep
و egrep
و fgrep
) ، على عكس grep الشائعة الأخرى التي تدعي أنها "بدائل grep" أو "بدائل" عندما يقوم هؤلاء بالفعل بتنفيذ سطر أوامر غير متوافق الخيارات واستخدام مُطابق regex غير متوافق، أي Perl regex فقط مقابل POSIX BRE (grep) وERE (egrep) عندما يدعم ugrep جميع أوضاع regex
تُظهر المعايير أن ugrep هو (واحد من) أسرع grep باستخدام مُطابق regex عالي الأداء القائم على DFA RE/flex
إذا كان هناك شيء يجب تحسينه أو إضافته إلى ugrep، فأخبرني بذلك!
الأولوية رقم 1 هي ضمان الجودة لمواصلة التأكد من أن ugrep لا يحتوي على أخطاء وأنه موثوق به
اجعل ugrep يعمل بشكل أسرع، راجع على سبيل المثال #432، #421
مشاركة نتائج الأداء القابلة للتكرار
ug
مخصص للاستخدام التفاعلي، حيث يقوم بتحميل ملف تكوين .ugrep اختياري مع تفضيلاتك الموجودة في دليل العمل أو الدليل الرئيسي، كما يبحث ug+
أيضًا في ملفات pdf والمستندات والكتب الإلكترونية وبيانات تعريف الصور
ugrep
للاستخدام المجمع مثل GNU grep بدون ملف تكوين .ugrep، يبحث ugrep+
أيضًا في ملفات pdf والمستندات والكتب الإلكترونية وبيانات تعريف الصور
يطابق أنماط Unicode بشكل افتراضي ويبحث تلقائيًا عن الملفات المشفرة UTF-8 وUTF-16 وUTF-32
يطابق أسطرًا متعددة مع n
أو R
في أنماط regex، ولا توجد حاجة إلى خيارات خاصة للقيام بذلك!
التعليمات المضمنة: ug --help
، حيث يعرض ug --help WHAT
الخيارات المتعلقة WHAT
تبحث عنه
ug --help regex
, ug --help globs
, ug --help fuzzy
, ug --help format
.
سهل الاستخدام مع ملفات تكوين قابلة للتخصيص يستخدمها الأمر ug
المخصص للاستخدام التفاعلي الذي يقوم بتحميل ملف تكوين .ugrep مع تفضيلاتك
ug PATTERN ... ugrep --config PATTERN ...
ug --save-config ...options-you-want-to-save...
يحفظ ملف تكوين .ugrep في دليل العمل بحيث يستخدم هذه الخيارات في المرة التالية التي تقوم فيها بتشغيل ug
هناك. قم بذلك في الدليل الرئيسي الخاص بك لحفظ ملف التكوين .ugrep مع الخيارات التي تريد استخدامها بشكل عام.
الاستعلام التفاعلي TUI، اضغط على F1 أو CTRL-Z للحصول على المساعدة وTAB/SHIFT-TAB للانتقال إلى الملفات والملفات
ug -Q ug -Q -e PATTERN
-Q
يستبدل PATTERN
في سطر الأوامر للسماح لك بإدخال الأنماط بشكل تفاعلي في TUI. في TUI، استخدم ALT + مفاتيح الحروف للتبديل بين تشغيل/إيقاف "خيارات الحروف" القصيرة، على سبيل المثال ALT-n (الخيار -n
) لإظهار/إخفاء أرقام الأسطر.
البحث في محتويات الأرشيفات (zip, tar, pax, jar, cpio, 7z) والملفات المضغوطة (gz, Z, bz, bz2, lzma, xz, lz4, zstd, brotli)
ug -z PATTERN ... ug -z --zmax=2 PATTERN ...
حدد -z --zmax=2
للبحث في الملفات المضغوطة والمحفوظات المتداخلة داخل الأرشيف. قد تتراوح الوسيطة --zmax
من 1 (افتراضي) إلى 99 لما يصل إلى 99 خطوة من خطوات فك الضغط وإلغاء الأرشفة للبحث في الأرشيفات المتداخلة
ابحث باستخدام أنماط استعلام منطقية تشبه Google باستخدام أنماط -%
مع AND
(أو مسافة فقط)، OR
(أو شريط |
)، NOT
(أو شرطة -
)، باستخدام علامات الاقتباس للمطابقة تمامًا، والتجميع مع ( )
(كما هو موضح في الجانب الأيسر أدناه)؛ أو مع الخيارات -e
(كـ "أو") و --and
و --andnot
و --not
أنماط regex (كما هو موضح على الجانب الأيمن أدناه):
ug -% 'A B C' ... ug -e 'A' --and 'B' --and 'C' ...
ug -% 'A|B C' ... ug -e 'A' -e 'B' --and 'C' ...
ug -% 'A -B -C' ... ug -e 'A' --andnot 'B' --andnot 'C' ...
ug -% 'A -(B|C)'... ug -e 'A' --andnot 'B' --andnot 'C' ...
ug -% '"abc" "def"' ... ug -e 'QabcE' --and 'QdefE' ...
حيث A
و B
و C
عبارة عن أنماط تعبيرية اعتباطية (استخدم الخيار -F
للبحث عن السلاسل)
حدد الخيار -%%
( --bool --files
) لتطبيق الاستعلام المنطقي على الملفات ككل: يتطابق الملف إذا كانت جميع الشروط المنطقية مستوفاة عن طريق مطابقة الأنماط على مستوى الملف. بخلاف ذلك، تنطبق الشروط المنطقية على الأسطر الفردية بشكل افتراضي، نظرًا لأن أدوات grep عادةً ما تكون مطابقات للأنماط تعتمد على الأسطر. يعرض الخيار --stats
الاستعلام في شكل يمكن قراءته بعد اكتمال البحث.
ابحث عن ملفات pdf وdoc وdocx وe-book والمزيد باستخدام ug+
باستخدام المرشحات المرتبطة بامتدادات أسماء الملفات:
ug+ PATTERN ...
أو حدد --filter
بنوع ملف لاستخدام أداة التصفية المساعدة:
ug --filter='pdf:pdftotext % -' PATTERN ...
ug --filter='doc:antiword %' PATTERN ...
ug --filter='odt,docx,epub,rtf:pandoc --wrap=preserve -t plain % -o -' PATTERN ...
ug --filter='odt,doc,docx,rtf,xls,xlsx,ppt,pptx:soffice --headless --cat %' PATTERN ...
ug --filter='pem:openssl x509 -text,cer,crt,der:openssl x509 -text -inform der' PATTERN ...
ug --filter='latin1:iconv -f LATIN1 -t UTF-8' PATTERN ...
الأمر ug+
هو نفس الأمر ug
، ولكنه يستخدم أيضًا عوامل التصفية للبحث في ملفات PDF والمستندات وبيانات تعريف الصور
اعرض السياق الأفقي باستخدام الخيار -o
( --only-matching
) وخيارات السياق -ABC
، على سبيل المثال للعثور على التطابقات في أسطر طويلة جدًا، مثل مصادر Javascript وJSON:
ug -o -C20 -nk PATTERN longlines.js
-o -C20
يناسب جميع التطابقات مع سياق مكون من 20 حرفًا قبل المطابقة و20 حرفًا بعد المطابقة (أي إجمالي 40 حرفًا Unicode)، ويخرج -nk
أرقام الأسطر والأعمدة.
ابحث عن تطابقات النمط التقريبية باستخدام البحث الغامض، ضمن مسافة Levenshtein المحددة
ug -Z PATTERN ... ug -Z3 PATTTERN ...
-Zn
يطابق ما يصل إلى n
من الأحرف الإضافية أو المفقودة أو المستبدلة، -Z+n
يطابق ما يصل إلى n
من الأحرف الإضافية، -Zn
يطابق ما يصل إلى n
من الأحرف المفقودة و -Z~n
يطابق ما يصل إلى n
من الأحرف المستبدلة. -Z
الافتراضي هو -Z1
.
بحث يشبه Fzf باستخدام regex (أو سلاسل ثابتة باستخدام -F
)، ومطابقة غامضة مع ما يصل إلى 4 أحرف إضافية باستخدام -Z+4
والكلمات فقط مع -w
، باستخدام -%%
لعمليات البحث المنطقية على مستوى الملف
ug -Q -%% -l -w -Z+4 --sort=best
-l
يسرد الملفات المطابقة في TUI، اضغط على TAB
ثم ALT-y
لعرض ملف، و SHIFT-TAB
و Alt-l
للعودة لعرض قائمة الملفات المطابقة مرتبة حسب أفضل تطابق
ابحث عن الملفات الثنائية واعرض الملفات السداسية مع تطابقات النمط الثنائي (نص Unicode أو -U
لأنماط البايت)
ug --hexdump -U BYTEPATTERN ... ug --hexdump TEXTPATTERN ...
ug -X -U BYTEPATTERN ... ug -X TEXTPATTERN ...
ug -W -U BYTEPATTERN ... ug -W TEXTPATTERN ...
--hexdump=4chC1
يعرض 4
أعمدة سداسية بدون عمود حرف c
، ولا توجد مسافات سداسية عشرية h
، ومع سطر سداسي عشري إضافي C1
قبل المباراة وبعدها.
قم بتضمين الملفات للبحث حسب أنواع الملفات أو "البايتات السحرية" للملفات أو استبعادها باستخدام ^
ug -t TYPE PATTERN ... ug -t ^TYPE PATTERN ...
ug -M 'MAGIC' PATTERN ... ug -M '^MAGIC' PATTERN ...
قم بتضمين الملفات والأدلة للبحث التي تطابق الكرات ذات النمط gitignore أو استبعدها باستخدام ^
ug -g 'FILEGLOB' PATTERN ... ug -g '^FILEGLOB' PATTERN ...
ug -g 'DIRGLOB/' PATTERN ... ug -g '^DIRGLOB/' PATTERN ...
ug -g 'PATH/FILEGLOB' PATTERN ... ug -g '^PATH/FILEGLOB' PATTERN ...
ug -g 'PATH/DIRGLOB/' PATTERN ... ug -g '^PATH/DIRGLOB/' PATTERN ...
قم بتضمين الملفات للبحث حسب امتدادات أسماء الملفات (اللاحقة) أو استبعادها باستخدام ^
، وهو اختصار لـ -g"*.EXT"
ug -O EXT PATTERN ... ug -O ^EXT PATTERN ...
تضمين الملفات المخفية (dotfiles) والأدلة للبحث (تم حذفها افتراضيًا)
ug -. PATTERN ... ug -g'.*,.*/' PATTERN ...
حدد hidden
في .ugrep الخاص بك للبحث دائمًا عن الملفات المخفية باستخدام ug
.
استبعاد الملفات المحددة بواسطة .gitignore وما إلى ذلك.
ug --ignore-files PATTERN ... ug --ignore-files=.ignore PATTERN ...
حدد ignore-files
في .ugrep الخاص بك لتجاهلها دائمًا باستخدام ug
. قم بإضافة ignore-files=...
حسب الرغبة.
أنماط البحث باستثناء الأنماط السلبية ("تطابق هذا ولكن ليس ذاك")
ug -e PATTERN -N NOTPATTERN ... ug -e '[0-9]+' -N 123 ...
استخدم أنماط regex المحددة مسبقًا للبحث في التعليمات البرمجية المصدر، وjavascript، وXML، وJSON، وHTML، وPHP، وmarkdown، وما إلى ذلك.
ug PATTERN -f c++/zap_comments -f c++/zap_strings ...
ug PATTERN -f php/zap_html ...
ug -f js/functions ... | ug PATTERN ...
فرز الملفات المطابقة حسب الاسم وأفضل تطابق والحجم والوقت
ug --sort PATTERN ... ug --sort=size PATTERN ...
ug --sort=changed PATTERN ... ug --sort=created PATTERN ...
ug -Z --sort=best PATTERN ... ug --no-sort PATTERN ...
نتائج الإخراج بتنسيقات CSV وJSON وXML والتنسيقات المحددة من قبل المستخدم
ug --csv PATTERN ... ug --json PATTERN ...
ug --xml PATTERN ... ug --format='file=%f line=%n match=%O%~' PATTERN ...
يعرض ug --help format
المساعدة في حقول التنسيق %
للحصول على مخرجات مخصصة.
ابحث باستخدام أنماط التعبير العادي المتوافقة مع Perl الخاصة بـ PCRE واعرض أو استبدل مطابقات النمط الفرعي
ug -P PATTERN ... ug -P --format='%1 and %2%~' 'PATTERN(SUB1)(SUB2)' ...
استبدل الأنماط في المخرجات بـ -P و--replace نص بديل، يحتوي بشكل اختياري على حقول تنسيق %
، باستخدام -y
لتمرير بقية الملف من خلال:
ug --replace='TEXT' PATTERN ... ug -y --replace='TEXT' PATTERN ...
ug --replace='(%m:%o)' PATTERN ... ug -y --replace='(%m:%o)' PATTERN ...
ug -P --replace='%1' PATTERN ... ug -y -P --replace='%1' PATTERN ...
يعرض ug --help format
التعليمات في حقول التنسيق %
لاستخدامها اختياريًا مع --replace
.
ابحث عن الملفات بتنسيق ترميز محدد مثل ISO-8859-1 حتى 16، CP 437، CP 850، MACROMAN، KOI8، إلخ.
ug --encoding=LATIN1 PATTERN ...
قم بتثبيت أحدث إصدار من ugrep باستخدام Homebrew:
$ brew install ugrep
أو التثبيت باستخدام MacPorts:
$ sudo port install ugrep
يؤدي هذا إلى تثبيت الأمرين ugrep
و ug
، حيث يكون ug
هو نفس ugrep
ولكنه يقوم أيضًا بتحميل ملف التكوين .ugrep عندما يكون موجودًا في دليل العمل أو الدليل الرئيسي.
التثبيت باستخدام Winget winget install Genivia.ugrep
أو قم بالتثبيت باستخدام Chocolatey choco install ugrep
أو التثبيت باستخدام Scoop scoop install ugrep
أو قم بتنزيل ugrep.exe
كامل الميزات القابل للتنفيذ كأداة إصدار من https://github.com/Genivia/ugrep/releases. يحتوي الإصدار المضغوط على الملف الثنائي الرئيسي ugrep.exe
بالإضافة إلى ug.exe
. يتم تحميل الأمر ug
، المخصص للاستخدام التفاعلي، وقراءته في الإعدادات من ملف التكوين .ugrep
(عندما يكون موجودًا في دليل العمل أو الدليل الرئيسي).
أضف ugrep.exe
و ug.exe
إلى مسار التنفيذ: انتقل إلى الإعدادات وابحث عن "المسار" في "العثور على الإعداد " . حدد متغيرات البيئة -> المسار -> جديد وأضف الدليل الذي وضعت فيه الملفات التنفيذية ugrep.exe
و ug.exe
.
نصيحة
تلميحات عملية حول استخدام ugrep.exe
و ug.exe
في سطر أوامر Windows:
'
ولكن استخدم "
بدلاً من ذلك؛ تعتبر معظم أدوات أوامر Windows المساعدة علامات الاقتباس '
جزءًا من وسيطة سطر الأوامر!-g/GLOB
بدلاً من وسيطات سطر أوامر GLOB
المعتادة لتحديد الملفات والدلائل للبحث فيها، خاصة لعمليات البحث العودية؛""
لمطابقة جميع المدخلات، قد يتم تجاهل ذلك بواسطة بعض مترجمي أوامر Windows مثل Powershell، وفي هذه الحالة يجب عليك تحديد الخيار --match
بدلاً من ذلك؛R
بدلاً من n
لمطابقة أي أسطر جديدة في Unicode، مثل أزواج rn
و r
و n
مفردة. $ apk add ugrep ugrep-doc
راجع https://pkgs.alpinelinux.org/packages?name=ugrep للحصول على معلومات الإصدار.
$ pacman -S ugrep
تحقق من https://archlinux.org/packages/extra/x86_64/ugrep للحصول على معلومات الإصدار.
قم أولاً بتمكين مستودع EPEL، ثم يمكنك تثبيت ugrep.
$ dnf install ugrep
تحقق من https://packages.fedoraproject.org/pkgs/ugrep/ugrep/ للحصول على معلومات الإصدار.
$ apt-get install ugrep
تحقق من https://packages.debian.org/ugrep للحصول على معلومات الإصدار. لبناء وتجربة ugrep
محليًا، راجع خطوات البناء "جميع الأنظمة الأساسية" أدناه.
$ dnf install ugrep
تحقق من https://packages.fedoraproject.org/pkgs/ugrep/ugrep/ للحصول على معلومات الإصدار.
$ pkg install ugrep
تحقق من https://www.freshports.org/textproc/ugrep للحصول على معلومات الإصدار.
$ pkgman install cmd:ugrep
تحقق من https://github.com/haikuports/haikuports/tree/master/app-text/ugrep للحصول على معلومات الإصدار. لبناء وتجربة ugrep
محليًا، راجع خطوات البناء "جميع الأنظمة الأساسية" أدناه.
يمكنك استخدام مثبت حزمة NetBSD القياسي (pkgsrc): http://cdn.netbsd.org/pub/pkgsrc/current/pkgsrc/textproc/ugrep/README.html
$ pkg_add ugrep
تحقق من https://openports.pl/path/sysutils/ugrep للحصول على معلومات الإصدار.
$ zypper install ugrep
تحقق من https://build.opensuse.org/package/show/utilities/ugrep للحصول على معلومات الإصدار.
قم أولاً بتمكين مستودع EPEL، ثم يمكنك تثبيت ugrep.
$ dnf install ugrep
تحقق من https://packages.fedoraproject.org/pkgs/ugrep/ugrep/ للحصول على معلومات الإصدار.
استنساخ ugrep
مع
$ git clone https://github.com/Genivia/ugrep
أو قم بزيارة https://github.com/Genivia/ugrep/releases لتنزيل إصدار محدد.
يمكنك دائمًا إضافة هذه الميزات لاحقًا، عندما تحتاج إلى هذه الميزات:
يتطلب الخيار -P
(تعبيرات Perl العادية) إما مكتبة PCRE2 (مستحسن) أو مكتبة Boost.Regex (احتياطي اختياري). إذا لم يتم تثبيت PCRE2، فقم بتثبيت PCRE2 باستخدام، على سبيل المثال sudo apt-get install -y libpcre2-dev
أو قم بتنزيل PCRE2 واتبع تعليمات التثبيت. وبدلاً من ذلك، قم بتنزيل Boost.Regex وتشغيل ./bootstrap.sh
و sudo ./b2 --with-regex install
. راجع التعزيز: البدء.
يتطلب الخيار -z
(البحث في الملفات المضغوطة والمحفوظات) تثبيت مكتبة zlib. يتم تثبيته على معظم الأنظمة. إذا لم يكن الأمر كذلك، فقم بتثبيته، على سبيل المثال باستخدام sudo apt-get install -y libz-dev
. للبحث عن ملفات .bz
و .bz2
، قم بتثبيت مكتبة bzip2 (موصى بها)، على سبيل المثال باستخدام sudo apt-get install -y libbz2-dev
. للبحث عن ملفات .lzma
و .xz
، قم بتثبيت مكتبة lzma (موصى به)، على سبيل المثال باستخدام sudo apt-get install -y liblzma-dev
. للبحث عن ملفات .lz4
، قم بتثبيت مكتبة lz4 (اختياري، غير مطلوب)، على سبيل المثال باستخدام sudo apt-get install -y liblz4-dev
. للبحث عن ملفات .zst
، قم بتثبيت مكتبة zstd (اختياري، غير مطلوب)، على سبيل المثال باستخدام sudo apt-get install -y libzstd-dev
. للبحث عن ملفات .br
، قم بتثبيت مكتبة brotli (اختياري، غير مطلوب)، على سبيل المثال باستخدام sudo apt-get install -y libbrotli-dev
. للبحث عن ملفات .bz3
، قم بتثبيت مكتبة bzip3 (اختياري، غير مطلوب)، على سبيل المثال باستخدام sudo apt-get install -y bzip3
.
نصيحة
حتى لو كان نظامك يحتوي على أدوات مساعدة لسطر الأوامر، مثل bzip2
، فهذا لا يعني بالضرورة تثبيت مكتبات التطوير مثل libbz2
. يجب تثبيت مكتبات التطوير .
قد لا يتم تكوين بعض أنظمة Linux لتحميل المكتبات الديناميكية من /usr/local/lib
، مما يتسبب في حدوث خطأ في تحميل المكتبة عند تشغيل ugrep
. لتصحيح ذلك، قم بإضافة export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib"
إلى ملف ~/.bashrc
الخاص بك. أو قم بتشغيل sudo ldconfig /usr/local/lib
.
قم بتنفيذ البرنامج النصي ./build.sh
لإنشاء ugrep
:
$ cd ugrep
$ ./build.sh
يؤدي هذا إلى إنشاء ملف ugrep
قابل للتنفيذ في دليل ugrep/src
باستخدام ./configure
و make -j
، ويتم التحقق منه باستخدام make test
. عند اجتياز كافة الاختبارات، يتم نسخ ملف ugrep
القابل للتنفيذ إلى ugrep/bin/ugrep
ويتم إضافة الرابط الرمزي ugrep/bin/ug -> ugrep/bin/ugrep
للأمر ug
.
لاحظ أن ug
هو نفسه ugrep
ولكنه يقوم أيضًا بتحميل ملف التكوين .ugrep عند وجوده في دليل العمل أو الدليل الرئيسي. هذا يعني أنه يمكنك تحديد خياراتك الافتراضية لـ ug
في .ugrep.
يمكن تحديد مسارات بديلة للمكتبات المثبتة أو المحلية باستخدام ./build.sh
. للحصول على مساعدة بشأن خيارات البناء المتاحة:
$ ./build.sh --help
يمكنك إنشاء ملفات تنفيذية ثابتة عن طريق تحديد:
$ ./build.sh --enable-static
قد يفشل هذا إذا لم ترتبط المكتبات بشكل ثابت، مثل brotli. في هذه الحالة حاول ./build.sh --enable-static --without-brotli
.
يمكنك إنشاء ugrep
مع تمكين الإعدادات الافتراضية المخصصة، مثل جهاز النداء:
$ ./build.sh --enable-pager
تتضمن خيارات تحديد الإعدادات الافتراضية للإصدارات ما يلي:
--help
في عرض خيارات البناء--enable-static
قم ببناء الملفات التنفيذية الثابتة، إن أمكن--enable-hidden
يبحث دائمًا عن الملفات والأدلة المخفية--enable-pager
يستخدم دائمًا جهاز النداء لعرض المخرجات على الأجهزة الطرفية--enable-pretty
تلوين الإخراج إلى المحطات الطرفية وإضافة عناوين أسماء الملفات--disable-auto-color
تعطيل الألوان التلقائية، يتطلب خيار ugrep --color=auto
لإظهار الألوان--disable-mmap
تعطيل الملفات المعينة للذاكرة--disable-sse2
تعطيل تحسينات SSE2 وAVX--disable-avx2
قم بتعطيل تحسينات AVX2 وAVX512BW، ولكن قم بالتجميع باستخدام SSE2 عند دعمها--disable-neon
تعطيل تحسينات ARM NEON/AArch64--with-grep-path
المسار -f
الافتراضي إذا لم يتم تعريف GREP_PATH
--with-grep-colors
الألوان الافتراضية إذا لم يتم تعريف GREP_COLORS
بعد اكتمال الإنشاء، انسخ ugrep/bin/ugrep
و ugrep/bin/ug
إلى موقع مناسب، على سبيل المثال في دليل ~/bin
الخاص بك. أو، إذا كنت قد ترغب في تثبيت الأوامر ugrep
و ug
وصفحات الرجل:
$ sudo make install
يؤدي هذا أيضًا إلى تثبيت ملفات الأنماط ذات الأنماط المحددة مسبقًا للخيار -f
على /usr/local/share/ugrep/patterns/
. يقوم الخيار -f
أولاً بالتحقق من وجود ملفات الأنماط في دليل العمل، وإذا لم يتم العثور عليها، فإنه يتحقق من متغير البيئة GREP_PATH
لتحميل ملفات الأنماط، وإذا لم يتم العثور عليها، فإنه يقرأ ملفات الأنماط المثبتة مسبقًا.
لسوء الحظ، لا تحتفظ نسخ git بالطوابع الزمنية مما يعني أنك قد تواجه "تحذير: 'alocal-1.15' مفقود على نظامك." أو لم يتم العثور على هذا الرأس التلقائي عند تشغيل make
.
للتغلب على هذه المشكلة، قم بتشغيل:
$ autoreconf -fi
$ ./build.sh
قد ينتج عن إصدار مجلس التعاون الخليجي 8 والإصدارات الأحدث تحذيرات من النوع "ملاحظة: تم تمرير المعلمة للوسيطة... تم تغييرها في إصدار مجلس التعاون الخليجي 7.1" . وينبغي تجاهل هذه التحذيرات.
يتم تضمين ملف Dockerfile لإنشاء ugrep
في حاوية Ubuntu.
قد يرغب المطورون في استخدام المطهرات للتحقق من كود ugrep عند إجراء تغييرات مهمة، على سبيل المثال لاكتشاف سباقات البيانات باستخدام ThreadSanitizer:
$ ./build.sh CXXFLAGS='-fsanitize=thread -O1 -g'
لقد تحققنا ugrep
باستخدام clang AddressSanitizer وMemorySanitizer وThreadSanitizer وUnifiedBehaviorSanitizer. تتكبد هذه الخيارات نفقات تشغيل كبيرة ويجب عدم استخدامها للإنشاء النهائي.
؟ العودة إلى جدول المحتويات
يرجى ملاحظة أن الأمرين ugrep و ug يبحثان في الملفات الثنائية افتراضيًا ولا يتجاهلان ملفات .gitignore المحددة، الأمر الذي لن يجعل مقارنات أداء البحث العودية ذات معنى ما لم يتم استخدام الخيارين -I
و- --ignore-files
. لجعل هذه الخيارات هي الخيار الافتراضي لـ ug ، ما عليك سوى إضافة ملفات ignore-binary
وملف ignore-files
إلى ملف تكوين .ugrep الخاص بك.
للحصول على مقارنة أداء محدثة لأحدث ugrep، يرجى الاطلاع على معايير أداء ugrep. Ugrep أسرع من GNU grep وSilver Searcher وack وsift. تتفوق سرعة Ugrep على ripgrep في معظم المعايير.
أولاً، دعونا نحدد الأمر :grep
في Vim للبحث عن الملفات بشكل متكرر. للقيام بذلك، أضف الأسطر التالية إلى .vimrc
الموجود في الدليل الجذر:
if executable('ugrep')
set grepprg=ugrep -RInk -j -u --tabs=1 --ignore-files
set grepformat=%f:%l:%c:%m,%f+%l+%c+%m,%-G%f\|%l\|%c\|%m
endif
يحدد هذا -j
عمليات البحث غير الحساسة لحالة الأحرف باستخدام الأمر Vim :grep
. بالنسبة لعمليات البحث الحساسة لحالة الأحرف، قم بإزالة -j
من grepprg
. يتم إدراج المطابقات المتعددة على نفس السطر في نافذة الإصلاح السريع بشكل منفصل. إذا لم يكن ذلك مرغوبًا، فقم بإزالة -u
من grepprg
. مع هذا التغيير، يتم عرض المطابقة الأولى فقط على السطر. الخيار --ignore-files
يتخطى الملفات المحددة في ملفات .gitignore
، عندما تكون موجودة. لتقييد عمق عمليات البحث العودية بالدليل الحالي فقط، قم بإلحاق -1
بـ grepprg
.
يمكنك الآن استدعاء الأمر Vim :grep
في Vim للبحث عن الملفات الموجودة على PATH
محدد لمطابقات PATTERN
:
:grep PATTERN [PATH]
إذا قمت بحذف PATH
، فسيتم البحث في دليل العمل. استخدم %
كـ PATH
للبحث فقط في الملف المفتوح حاليًا في Vim:
:grep PATTERN %
يعرض الأمر :grep
النتائج في نافذة الإصلاح السريع التي تسمح لك بالانتقال بسرعة إلى التطابقات التي تم العثور عليها.
لفتح نافذة الإصلاح السريع بأحدث قائمة التطابقات:
:copen
انقر نقرًا مزدوجًا على سطر في هذه النافذة (أو حدد سطرًا واضغط على ENTER) للانتقال إلى الملف والموقع في ملف المطابقة. أدخل الأمرين :cn
و :cp
للانتقال إلى المباراة التالية أو السابقة، على التوالي. لتحديث نتائج البحث في نافذة الإصلاح السريع، ما عليك سوى استخدام grep لهم. على سبيل المثال، للبحث بشكل متكرر في كود مصدر C++ الذي يحمل علامة FIXME
في دليل العمل:
:grep -tc++ FIXME
لإغلاق نافذة الإصلاح السريع:
:cclose
يمكنك استخدام خيارات ugrep مع الأمر :grep
، على سبيل المثال لتحديد تعليقات أحادية ومتعددة الأسطر في الملف الحالي:
:grep -f c++/comments %
يتم عرض السطر الأول فقط من التعليق متعدد الأسطر في الإصلاح السريع لتوفير المساحة. لإظهار جميع أسطر المطابقة متعددة الأسطر، قم بإزالة %-G
من grepformat
.
إحدى أدوات Vim الشائعة هي ctrlp.vim، والتي يتم تثبيتها مع:
$ cd ~/.vim
$ git clone https://github.com/kien/ctrlp.vim.git bundle/ctrlp.vim
يستخدم CtrlP ugrep عن طريق إضافة الأسطر التالية إلى .vimrc
الخاص بك:
if executable('ugrep')
set runtimepath^=~/.vim/bundle/ctrlp.vim
let g:ctrlp_match_window='bottom,order:ttb'
let g:ctrlp_user_command='ugrep "" %s -Rl -I --ignore-files -3'
endif
حيث -I
يتخطى الملفات الثنائية، والخيار --ignore-files
يتخطى الملفات المحددة في ملفات .gitignore
، عندما تكون موجودة، والخيار -3
يقيد البحث في الدلائل على ثلاثة مستويات (دليل العمل وما يصل إلى مستويين أدناه).
ابدأ تشغيل Vim ثم أدخل الأمر:
:helptags ~/.vim/bundle/ctrlp.vim/doc
لعرض وثائق CtrlP في Vim، أدخل الأمر:
:help ctrlp.txt
؟ العودة إلى جدول المحتويات
بفضل Manuel Uberti، يمكنك الآن استخدام ugrep في Emacs. لاستخدام ugrep بدلاً من GNU grep داخل Emacs، أضف السطر التالي إلى ملف .emacs.d/init.el
الخاص بك:
(setq-default xref-search-program ‘ugrep)
وهذا يعني أن أوامر Emacs مثل project-find-regexp
التي تعتمد على Xref يمكنها الآن الاستفادة من قوة ugrep .
علاوة على ذلك، من الممكن استخدام grep
في أوامر Emacs grep. على سبيل المثال، يمكنك تشغيل lgrep
باستخدام ugrep
عن طريق تخصيص grep-template
لشيء مثل ما يلي:
(setq-default grep-template "ugrep --color=always -0Iinr -e <R>")
إذا لم يكن لديك الإصدار 29 من Emacs (أو أحدث)، فيمكنك تنزيل Emacs وإنشاءه من فرع Emacs الرئيسي، أو تمكين تكامل Xref مع ugrep يدويًا:
(with-eval-after-load 'xref
(push '(ugrep . "xargs -0 ugrep <C> --null -ns -e <R>")
xref-search-program-alist)
(setq-default xref-search-program 'ugrep))
؟ العودة إلى جدول المحتويات
يدعم ugrep الجاهز جميع خيارات سطر أوامر GNU/BSD grep القياسية ويحسن الكثير منها أيضًا. للحصول على تفاصيل، راجع التحسينات الملحوظة على grep.
إذا كنت تريد الالتزام تمامًا بأنماط GNU/BSD grep ASCII/LATIN1 غير UTF Unicode، فاستخدم الخيار -U
لتعطيل المطابقة الكاملة لنمط Unicode.
في الواقع، يتم تنفيذ ugrep
باستخدام الخيارات -U
, -Y
, -.
و --sort
يجعلها تتصرف تمامًا مثل egrep
، حيث تتطابق فقط مع أنماط ASCII/LATIN1 غير UTF Unicode، مما يسمح للأنماط الفارغة بمطابقة الملفات المخفية والبحث فيها بدلاً من تجاهلها، على التوالي. انظر معادلة grep .
يمكنك إنشاء أسماء مستعارة مناسبة لـ grep مع أو بدون الخيارات -U
, -Y
, -.
و --sort
أو تضمين خيارات أخرى حسب الرغبة.
أو يمكنك إنشاء ملفات تنفيذية grep
و egrep
و fgrep
عن طريق نسخ ugrep
إلى تلك الأسماء. عندما يتم نسخ الملف القابل للتنفيذ ugrep
(أو ugrep.exe
) كـ grep
( grep.exe
) و egrep
( egrep.exe
) و fgrep
( fgrep.exe
) ثم الخيار -U
و -Y
و -.
يتم تمكينها تلقائيًا مع إما -G
لـ grep
و -E
لـ egrep
و -F
لـ fgrep
. بالإضافة إلى ذلك، عند النسخ بتنسيق zgrep
و zegrep
و zfgrep
، يتم تمكين الخيار -z
. على سبيل المثال، عندما يتم نسخ ugrep
كـ zegrep
، فإن الخيارات -z
و -E
و -Y
و -.
و --sort
ممكّنان.
وبالمثل، تعمل الارتباطات الرمزية والروابط الثابتة لـ ugrep
بشكل جيد أيضًا لإنشاء بدائل grep
و egrep
و fgrep
. على سبيل المثال، لإنشاء رابط رمزي egrep
:
sudo ln -s `which ugrep` /opt/local/bin/egrep
يعد /opt/local/bin
مجرد مثال وقد يكون أو لا يكون في $path
الخاص بك وقد يتم العثور عليه أو لا يتم العثور عليه عند تنفيذ egrep
اعتمادًا على $path
.
ugrep يعادل GNU/BSD grep عند استخدام الخيارات التالية:
grep = ugrep -G -U -Y -. --sort -Dread -dread
egrep = ugrep -E -U -Y -. --sort -Dread -dread
fgrep = ugrep -F -U -Y -. --sort -Dread -dread
zgrep = ugrep -z -G -U -Y -. --sort -Dread -dread
zegrep = ugrep -z -E -U -Y -. --sort -Dread -dread
zfgrep = ugrep -z -F -U -Y -. --sort -Dread -dread
أين:
-U
يعطل مطابقة نمط الأحرف العريضة Unicode، على سبيل المثال النمط xa3
يطابق البايت A3 بدلاً من نقطة رمز Unicode U+00A3 التي يمثلها تسلسل UTF-8 C2 A3. بشكل افتراضي في ugrep، يتطابق xa3
مع U+00A3. لا ننصح باستخدام -U
لعمليات البحث عن أنماط النص، فقط لعمليات البحث الثنائية أو للبحث في ملفات latin-1 (iso-8859-1) دون الإبلاغ عن هذه الملفات كملفات ثنائية (منذ ugrep v3.5.0).-Y
يمكّن المطابقات الفارغة، على سبيل المثال النمط a*
يطابق كل سطر بدلاً من تسلسل a
s. افتراضيًا في ugrep، يتطابق النمط a*
مع تسلسل a
. علاوة على ذلك، في ugrep، يتطابق النمط a*b*c*
مع ما يفترض أن يطابقه افتراضيًا. انظر التحسينات.-.
يبحث في الملفات المخفية (dotfiles). افتراضيًا، يتم تجاهل الملفات المخفية، مثل معظم أدوات Unix المساعدة.--sort
يحدد المخرجات مرتبة حسب اسم المسار، ويعرض الملفات المطابقة التي تم فرزها أولاً متبوعة بالمطابقات العودية التي تم فرزها في الدلائل الفرعية. وبخلاف ذلك، يتم الإبلاغ عن الملفات المطابقة بدون ترتيب معين لتحسين الأداء؛-Dread
و -dread
هما الإعدادات الافتراضية لـ GNU/BSD ولكن لا يوصى بهما، راجع التحسينات للحصول على شرح.؟ العودة إلى جدول المحتويات
الأسماء المستعارة شائعة الاستخدام التي يمكنك إضافتها إلى .bashrc
لزيادة الإنتاجية:
alias uq = 'ug -Q' # interactive TUI search (uses .ugrep config)
alias uz = 'ug -z' # compressed files and archives search (uses .ugrep config)
alias ux = 'ug -U --hexdump' # binary pattern search (uses .ugrep config)
alias ugit = 'ug -R --ignore-files' # works like git-grep & define your preferences in .ugrep config
alias grep = 'ug -G' # search with basic regular expressions (BRE) like grep
alias egrep = 'ug -E' # search with extended regular expressions (ERE) like egrep
alias fgrep = 'ug -F' # find string(s) like fgrep
alias zgrep = 'ug -zG' # search compressed files and archives with BRE
alias zegrep = 'ug -zE' # search compressed files and archives with ERE
alias zfgrep = 'ug -zF' # find string(s) in compressed files and/or archives
alias xdump = 'ugrep -X ""' # hexdump files without searching (don't use .ugrep config)
alias zmore = 'ugrep+ -z -I -+ --pager ""' # view compressed, archived and regular files (don't use .ugrep config)
؟ العودة إلى جدول المحتويات
-Q
.n
.-U
).--bool
).--ignore-files
.-Z
.-z
.-z
.-z
و-- --zmax=NUM
لما يصل إلى NUM
من المستويات.--filter
باستخدام أدوات تحويل التنسيق التابعة لجهات خارجية كمكونات إضافية.-r
للبحث في الدلائل بشكل متكرر.-.
).-E
كـ egrep، بينما -G
يمكّن BRE).-J1
).-W
(إخراج التطابقات الثنائية بالصيغة السداسية مع إخراج تطابقات النص كالمعتاد) -X
(إخراج جميع التطابقات بالصيغة السداسية).--format
).-f
يستخدم متغير البيئة GREP_PATH
أو الأنماط المحددة مسبقًا المثبتة في /usr/local/share/ugrep/patterns
. إذا تم تحديد -f
وأيضًا تحديد نمط -e
واحد أو أكثر، فإن الخيارات -F
و -x
و -w
لا تنطبق على أنماط -f
. وذلك لتجنب الارتباك عند استخدام -f
مع الأنماط المحددة مسبقًا والتي قد لا تعمل بشكل صحيح مع هذه الخيارات.-O
و -M
و -t
امتدادات الملفات وأنماط البايت السحرية لتوقيع الملف وأنواع الملفات المحددة مسبقًا، على التوالي. يسمح هذا بالبحث عن أنواع معينة من الملفات في أشجار الدليل، على سبيل المثال باستخدام خيارات البحث العودية -R
و -r
. تنطبق الخيارات -O
و -M
و -t
أيضًا على الملفات المؤرشفة في ملفات cpio وjar وpax وtar وzip و7z.-k
, --column-number
لعرض رقم العمود، مع مراعاة تباعد علامات التبويب عن طريق توسيع علامات التبويب، كما هو محدد بواسطة الخيار --tabs
.-P
(تعبيرات Perl العادية) يدعم المراجع الخلفية (مع --format
) و lookbehinds، الذي يستخدم مكتبة PCRE2 أو Boost.Regex لمطابقة تعبير Perl السريع مع بناء جملة يشبه PCRE.-b
مع الخيار -o
أو مع الخيار -u
، يعرض ugrep إزاحة البايت الدقيقة لمطابقة النمط بدلاً من إزاحة البايت لبداية السطر المطابق الذي تم الإبلاغ عنه بواسطة GNU/BSD grep.-u
, --ungroup
لعدم تجميع المطابقات المتعددة في كل سطر. يعرض هذا الخيار سطر إدخال مطابقًا مرة أخرى لكل نمط مطابق إضافي على السطر. يعد هذا الخيار مفيدًا بشكل خاص مع الخيار -c
للإبلاغ عن إجمالي عدد تطابقات النمط لكل ملف بدلاً من عدد الأسطر المطابقة لكل ملف.-Y
مطابقة الأنماط الفارغة. يعد التعامل مع أنماط المطابقة الفارغة أمرًا غريبًا ويعطي نتائج مختلفة مع GNU grep مقابل BSD grep. لا يتم إخراج المطابقات الفارغة بواسطة ugrep افتراضيًا، مما يتجنب ارتكاب الأخطاء التي قد تؤدي إلى نتائج "عشوائية". على سبيل المثال، مع GNU/BSD grep، يطابق النمط a*
كل سطر في الإدخال، ويطابق فعليًا xyz
ثلاث مرات (الانتقالات الفارغة قبل وبين x
و y
و z
). يتطلب السماح بالمطابقات الفارغة خيار ugrep -Y
. الأنماط التي تبدأ بـ ^
أو تنتهي بـ $
، مثل ^h*$
، تتطابق فارغة. تعمل هذه الأنماط تلقائيًا على تمكين الخيار -Y
.-D, --devices=ACTION
يتم skip
بشكل افتراضي، بدلاً من read
. يمنع هذا التعليق بشكل غير متوقع على الأنابيب المسماة في الدلائل التي يتم البحث عنها بشكل متكرر، كما قد يحدث مع GNU/BSD grep الذي read
الأجهزة بشكل افتراضي.-d, --directories=ACTION
يتم skip
بشكل افتراضي، بدلاً من read
. افتراضيًا، يتم البحث في الدلائل المحددة في سطر الأوامر، ولكن ليس بشكل متكرر أعمق في الدلائل الفرعية.-N PATTERN
، وهي أنماط من النموذج (?^X)
تتخطى كل مدخلات X
، وبالتالي تزيل X
من البحث. على سبيل المثال، يمكن استخدام الأنماط السلبية لتخطي السلاسل والتعليقات عند البحث عن المعرفات في التعليمات البرمجية المصدر والعثور على التطابقات غير الموجودة في السلاسل والتعليقات. تستخدم أنماط zap
المحددة مسبقًا أنماطًا سلبية، على سبيل المثال، استخدم -f cpp/zap_comments
لتجاهل تطابقات الأنماط في تعليقات C++.GREP_OPTIONS
، لأن سلوك ugrep يجب أن يكون محمولاً ويمكن التنبؤ به على كل نظام. كما تخلى GNU grep عن GREP_OPTIONS
لهذا السبب. الرجاء استخدام الأمر ug
الذي يقوم بتحميل ملف التكوين .ugrep الموجود في دليل العمل أو في الدليل الرئيسي عند وجوده، أو استخدام الأسماء المستعارة لـ Shell لإنشاء أوامر جديدة مع خيارات بحث محددة.؟ العودة إلى جدول المحتويات
لإجراء بحث باستخدام ملف التكوين .ugrep
الموجود في دليل العمل أو الدليل الرئيسي (لاحظ أن ug
هو نفسه ugrep --config
):
ug PATTERN FILE...
لحفظ ملف تكوين .ugrep
في دليل العمل، قم بتحرير هذا الملف في دليلك الرئيسي لتخصيص تفضيلاتك لإعدادات ug
الافتراضية:
ug --save-config
للبحث في دليل العمل وبشكل أعمق بشكل متكرر عن main
(لاحظ أن الارتباطات الرمزية المتكررة -r
يتم تمكينها افتراضيًا إذا لم يتم تحديد وسائط الملف):
ug main
نفس الشيء، ولكن ابحث فقط في ملفات التعليمات البرمجية المصدر لـ C++ بشكل متكرر، متجاهلاً كافة الملفات الأخرى:
ug -tc++ main
نفس الشيء، باستخدام الاستعلام التفاعلي TUI، بدءًا من نمط البحث الأولي main
(لاحظ أن -Q
مع النمط الأولي يتطلب الخيار -e
لأن الأنماط يتم تحديدها عادةً بشكل تفاعلي وتعتبر جميع وسيطات سطر الأوامر ملفات/أدلة):
ug -Q -tc++ -e main
للبحث عن #define
(و # define
وما إلى ذلك) باستخدام نمط regex في ملفات C++ (لاحظ أنه يجب الإشارة إلى الأنماط لمنع التفاف الصدفة على *
و ?
):
ug -tc++ '#[t ]*define'
للبحث عن main
ككلمة ( -w
) بشكل متكرر دون اتباع الارتباطات الرمزية ( -r
) في الدليل myproject
، مع إظهار أرقام السطر ( -n
) والعمود ( -k
) المتطابقة بجوار الأسطر المتطابقة:
ug -r -nkw main myproject
نفس الشيء، ولكن ابحث فقط في myproject
دون التكرار بشكل أعمق (لاحظ أنه يتم البحث عن وسيطات الدليل على مستوى واحد افتراضيًا):
ug -nkw main myproject
نفس الشيء، ولكن ابحث في myproject
ومستوى دليل فرعي واحد أعمق (مستويين) باستخدام -2
:
ug -2 -nkw main myproject
نفس الشيء، ولكن ابحث فقط عن ملفات C++ في myproject
وأدلته الفرعية باستخدام -tc++
:
ug -tc++ -2 -nkw main myproject
نفس الشيء، ولكن ابحث أيضًا داخل الأرشيفات (مثل ملفات zip وtar) والملفات المضغوطة باستخدام -z
:
ug -z -tc++ -2 -nkw main myproject
ابحث بشكل متكرر في دليل العمل عن main
مع تجاهل الملفات التي تم gitignored (على سبيل المثال بافتراض أن .gitignore
موجود في دليل العمل أو أدناه):
ug --ignore-files -tc++ -nkw main
لسرد كافة الملفات الموجودة في دليل العمل والملفات الأعمق التي لم يتم تجاهلها بواسطة ملف (ملفات) .gitignore
:
ug --ignore-files -l ''
لعرض قائمة امتدادات أسماء الملفات و"البايتات السحرية" (shebangs) التي يتم البحث عنها بما يتوافق مع الوسيطات -t
:
ug -tlist
لسرد جميع ملفات الصدفة بشكل متكرر، بناءً على الامتدادات والملفات ذات -l
(لاحظ أن ''
يتطابق مع أي ملف غير فارغ):
ug -l -tShell ''
؟ العودة إلى جدول المحتويات
للبحث عن main
في التعليمات البرمجية المصدر مع تجاهل السلاسل وكتل التعليقات، يمكنك استخدام الأنماط السلبية مع الخيار -N
لتخطي التطابقات غير المرغوب فيها في السلاسل المقتبسة وكتل التعليقات في C/C++:
ug -r -nkw -e 'main' -N '"(\.|\r?n|[^\n"])*"|//.*|/*(.*n)*?.**+/' myproject
هذا يتطلب الكثير من العمل للكتابة بشكل صحيح! إذا كنت مثلي، فلا أريد قضاء الوقت في العبث بأنماط التعبير العادي عندما أعمل على شيء أكثر أهمية. هناك طريقة أسهل باستخدام أنماط UGrep المحددة مسبقًا ( -f
) التي يتم تثبيتها باستخدام أداة ugrep
:
ug -r -nkw 'main' -f c/zap_strings -f c/zap_comments myproject
يبحث هذا الاستعلام أيضًا من خلال ملفات أخرى غير رمز مصدر C/C ++ ، مثل ReadMes و Makefiles وما إلى ذلك. نحن أيضًا نتخطى Symlinks مع -r
. لذلك دعونا نحدد هذا الاستعلام عن طريق تحديد ملفات C/C ++ فقط باستخدام الخيار -tc,c++
وتضمين Symlinks إلى الملفات والدلائل مع -R
:
ug -R -tc,c++ -nkw 'main' -f c/zap_strings -f c/zap_comments myproject
ماذا لو كنت تريد فقط البحث عن المعرف main
ولكن ليس كدالة main(
؟ في هذه الحالة ، استخدم نمطًا سلبيًا لذلك لتخطي mainh*(
تطابق النمط:
ug -R -tc,c++ -nkw -e 'main' -N 'mainh*(' -f c/zap_strings -f c/zap_comments myproject
يستخدم هذا الخيارات -e
و -N
لتحديد نمط ونمط سلبي بشكل صريح ، على التوالي ، والذي يشكل بشكل أساسي النمط main|(?^mainh*()
، حيث يتطابق h
إلى الفضاء وعلامة التبويب. ، الأنماط السلبية مفيدة لتصفية مباريات الأنماط التي لا نفهمها.
كمثال آخر ، دعنا نقول أننا قد نرغب في البحث عن Word FIXME
في كتل التعليق C/C ++. للقيام بذلك ، يمكننا أولاً تحديد كتل التعليقات باستخدام نمط c/comments
المحدد مسبقًا ، ثم تحديد الخطوط باستخدام FIXME
باستخدام أنبوب:
ug -R -tc,c++ -nk -f c/comments myproject | ug -w 'FIXME'
يكون تصفية النتائج باستخدام الأنابيب أسهل بشكل عام من استخدام ومنطق بعض أدوات البحث التي تستخدمها. يتبع هذا النهج روح UNIX للحفاظ على المرافق بسيطة واستخدامها في تركيبة لمهام أكثر تعقيدًا.
دعونا ننتج قائمة مرتبة لجميع المعرفات الموجودة في كود مصدر Java أثناء تخطي السلاسل والتعليقات:
ug -R -tjava -f java/names myproject | sort -u
هذا يطابق معرفات java unicode باستخدام regex p{JavaIdentifierStart}p{JavaIdentifierPart}*
المعرفة في patterns/java/names
.
من خلال الأدوات التقليدية التي تشبه GREP و GREP ، يتطلب الأمر جهدًا كبيرًا للبحث بشكل متكرر عن ملف مصدر C/C ++ الذي يحدد الوظيفة qsort
، ويتطلب شيئًا كهذا:
ug -R --include='*.c' --include='*.cpp' '^([ t]*[[:word:]:*&]+)+[ t]+qsort[ t]*([^;n]+$' myproject
لحسن الحظ ، مع UGREP ، يمكننا ببساطة تحديد جميع تعريفات الوظائف في الملفات التي تحتوي على ملحق .c
أو .cpp
باستخدام الخيار -Oc,cpp
وباستخدام functions
نمط محددة مسبقًا مثبتة باستخدام الأداة لإنتاج جميع تعريفات الوظائف. ثم نختار الشخص الذي نريده:
ug -R -Oc,cpp -nk -f c/functions | ug 'qsort'
لاحظ أنه يمكن أن نستخدم -tc,c++
لتحديد ملفات C/C ++ ، ولكن هذا يتضمن أيضًا ملفات الرأس عندما نريد فقط البحث عن ملفات .c
و .cpp
.
يمكننا أيضًا تخطي الملفات والأدلة من البحث والتي تم تعريفها في .gitignore
. للقيام بذلك ، نستخدم --ignore-files
لاستبعاد أي ملفات وأدلة .gitignore
عمليات البحث العودية التي تتطابق مع الكرات .gitignore
ug -R -tc++ --ignore-files -f c++/defines
يبحث هذا عن ملفات C ++ ( -tc++
) في دليل العمل لخطوط #define
( -f c++/defines
) ، أثناء تخطي الملفات والأدلة المعلنة في .gitignore
. إذا وجدت هذا وقتًا طويلاً لاكتبه ، فحدد اسم مستعار للبحث في أدلة GitHub:
alias ugit='ugrep -R --ignore-files'
ugit -tc++ -f c++/defines
لتسليط الضوء على المباريات عند دفعها عبر سلسلة من الأنابيب ، يجب أن نستخدمها --color=always
:
ugit --color=always -tc++ -f c++/defines | ugrep -w 'FOO.*'
هذا يرجع قائمة عالية الضوء من جميع #define FOO...
في ملفات رمز المصدر C/C ++ ، وتخطي الملفات المحددة في .gitignore
.
لاحظ أن تكملة- --exclude
ليست --include
، لأن الاستثناءات لها دائمًا الأسبقية على الادراج ، لذلك لا يمكننا إدراج الملفات التي يتم تجاهلها بشكل موثوق مع --include-from='.gitignore'
. يتم زيارة الملفات المحددة بشكل صريح فقط مع --include
ودليل محدد بشكل صريح مع-- --include-dir
. --include-from
بين القوائم التي تعتبر ملفات ودليلات تتم إضافتها إلى --include
و --include-dir
على التوالي. هذا يعني أنه عندما لا يتم سرد أسماء الدليل ومسارات الدليل بشكل صريح في هذا الملف ، فلن يتم زيارته باستخدام --include-from
.
نظرًا لأن UGREP يتحقق مما إذا كان الإدخال صحيحًا UNICODE UNICODE UTF (ما لم يتم استخدام -U
) ، فمن الممكن استخدامه كمرشح لتجاهل الإخراج غير UTF الذي ينتجه البرنامج:
program | ugrep -I ''
إذا كان البرنامج ينتج إخراجًا صالحًا ، فسيتم تمرير الإخراج ، وإلا يتم ترشيح الإخراج Out Out Out -I
. إذا كان الإخراج صالحًا في البداية بالنسبة لجزء كبير جدًا ولكن يتبعه إخراج غير صالح ، فقد يعرض UGREP في البداية الإخراج حتى ولكن باستثناء الإخراج غير الصالح الذي تم حظره بعد الإخراج.
لتصفية الخطوط التي هي صالحة ASCII أو UTF مشفرة ، مع إزالة الخطوط التي ليست:
program | ugrep '[p{Unicode}--[n]]+'
لاحظ أن p{Unicode}
يتطابق مع n
لكننا لا نريد أن نتناسب مع الملف بأكمله! مجرد خطوط مع [p{Unicode}--[n]]+
.
؟ العودة إلى جدول المحتويات
صفحة رجل Ugrep:
man ugrep
لإظهار صفحة المساعدة:
ug --help
لإظهار الخيارات التي تذكر WHAT
:
ug --help WHAT
لإظهار قائمة بقيم خيار -t TYPES
:
ug -tlist
في الاستعلام التفاعلي TUI ، اضغط F1 أو CTRL-Z للحصول على المساعدة والخيارات:
ug -Q
؟ العودة إلى جدول المحتويات
--config[=FILE], ---[FILE]
Use configuration FILE. The default FILE is `.ugrep'. The working
directory is checked first for FILE, then the home directory. The
options specified in the configuration FILE are parsed first,
followed by the remaining options specified on the command line.
The ug command automatically loads a `.ugrep' configuration file,
unless --config=FILE or --no-config is specified.
--no-config
Do not load the default .ugrep configuration file.
--save-config[=FILE] [OPTIONS]
Save configuration FILE to include OPTIONS. Update FILE when
first loaded with --config=FILE. The default FILE is `.ugrep',
which is automatically loaded by the ug command. When FILE is a
`-', writes the configuration to standard output. Only part of the
OPTIONS are saved that do not cause searches to fail when combined
with other options. Additional options may be specified by editing
the saved configuration file. A configuration file may be modified
manually to specify one or more config[=FILE] to indirectly load
the specified FILEs, but recursive config loading is not allowed.
يعد أمر ug
للبحث التفاعلي المعتمد على السياق وهو يعادل أمر ugrep --config
لتحميل ملف التكوين .ugrep
ug PATTERN ...
ugrep --config PATTERN ...
يقوم الأمر ug
أيضًا بفرز الملفات حسب الاسم لكل دليل تم تفتيشه. يحتوي ملف التكوين على NAME=VALUE
لكل سطر ، حيث يكون NAME
هو اسم خيار طويل (بدون --
) و =VALUE
هي وسيطة ، وهي اختيارية وقد يتم حذفها اعتمادًا على الخيار. يتم تجاهل الخطوط والخطوط الفارغة التي تبدأ بـ #
:
# Color scheme
colors=cx=hb:ms=hiy:mc=hic:fn=hi+y+K:ln=hg:cn=hg:bn=hg:se=
# Disable searching hidden files and directories
no-hidden
# ignore files specified in .ignore and .gitignore in recursive searches
ignore-files=.ignore
ignore-files=.gitignore
يتم تحليل خيارات سطر الأوامر بالترتيب التالي: أولاً يتم تحميل ملف التكوين (الافتراضي أو المسماة) ، ثم يتم تحليل الخيارات والوسائط المتبقية على سطر الأوامر.
الخيار --stats
ملف التكوين المستخدم بعد البحث.
تهدف ملفات التكوين المسماة إلى تبسيط مهام البحث المخصصة ، عن طريق تقليل عدد خيارات سطر الأوامر إلى ---FILE
واحد فقط لاستخدام مجموعة الخيارات المحددة في FILE
. --config=FILE
ونموذجه المختصر ---FILE
قم بتحميل ملف التكوين المحدد الموجود في دليل العمل ، أو عند عدم العثور عليه ، الموجود في الدليل الرئيسي:
ug ---FILE PATTERN ...
ugrep ---FILE PATTERN ...
يتم إنتاج خطأ عند عدم العثور على FILE
أو لا يمكن قراءته.
يمكن استخدام ملفات التكوين المسماة لتحديد مجموعة من الخيارات الخاصة بمتطلبات المهمة في سير عمل تطوير المشروع. على سبيل المثال ، للإبلاغ عن المشكلات التي لم يتم حلها عن طريق التحقق من رمز المصدر والوثائق للتعليقات مع عناصر FixMe و TODO. يمكن ترجمة ملف التكوين المسمى إلى مشروع عن طريق وضعه في دليل المشروع ، أو يمكن صنعه عالميًا عن طريق وضعه في الدليل المنزلي. بالنسبة للتغذية المرتدة ، يمكن تحديد نظام الألوان الخاص بهذه المهمة colors
الخيار في FILE
التكوين للمساعدة في تحديد الإخراج الذي تم إنتاجه بواسطة تكوين مسمى بدلاً من التكوين الافتراضي.
يحفظ خيار-- --save-config
ملف تكوين .ugrep
إلى دليل العمل باستخدام التكوين الحالي المحمل بـ- --config
. هذا يحفظ التكوين الحالي مع خيارات إضافية عند تحديدها أيضًا. فقط تلك الخيارات التي لا يمكن أن تتعارض مع الخيارات والخيارات الأخرى التي لا يمكن أن تؤثر سلبًا على نتائج البحث.
يحفظ خيار --save-config=FILE
التكوين إلى FILE
المحدد. تتم كتابة التكوين إلى الإخراج القياسي عندما يكون FILE
A -
.
بدلاً من ذلك ، قد يتم إنشاء ملف التكوين يدويًا أو تعديله. قد يتضمن ملف التكوين واحد أو أكثر config[=FILE]
لتحميل FILE
المحدد بشكل غير مباشر ، ولكن يتم حظر تحميل التكوين المتكرر. إن أبسط طريقة لإنشاء ملف تكوين هو تحديد config
في الجزء العلوي من الملف ، تليها الخيارات الطويلة لتجاوز الافتراضات.
؟ العودة إلى جدول المحتويات
-Q[=DELAY], --query[=DELAY]
Query mode: start a TUI to perform interactive searches. This mode
requires an ANSI capable terminal. An optional DELAY argument may
be specified to reduce or increase the response time to execute
searches after the last key press, in increments of 100ms, where
the default is 3 (300ms delay). No whitespace may be given between
-Q and its argument DELAY. Initial patterns may be specified with
-e PATTERN, i.e. a PATTERN argument requires option -e. Press F1
or CTRL-Z to view the help screen. Press F2 or CTRL-Y to invoke a
command to view or edit the file shown at the top of the screen.
The command can be specified with option --view, or defaults to
environment variable PAGER when defined, or EDITOR. Press Tab and
Shift-Tab to navigate directories and to select a file to search.
Press Enter to select lines to output. Press ALT-l for option -l
to list files, ALT-n for -n, etc. Non-option commands include
ALT-] to increase context. See also options --no-confirm, --delay,
--split and --view.
--no-confirm
Do not confirm actions in -Q query TUI. The default is confirm.
--delay=DELAY
Set the default -Q key response delay. Default is 3 for 300ms.
--split
Split the -Q query TUI screen on startup.
--view[=COMMAND]
Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y.
يبدأ هذا الخيار واجهة المستخدم لإدخال أنماط البحث بشكل تفاعلي:
-c
من حساب المباريات. الضغط على Alt -C مرة أخرى يعطل -c
. يمكن تبديل الخيارات بمفتاح ALT أثناء البحث أو عند عرض شاشة المساعدة. إذا لم يتم دعم مفاتيح ALT/META (على سبيل المثال X11 Xterm) ، فاضغط على Ctrl-O متبوعًا بالمفتاح المقابل للخيار.-g
ملف ودليل المطابقة ، قائمة مفصولة بفاصلة من أنماط GITIGNORE على غرار GITIGNORE. Presssing ESC يعيد التحكم إلى موجه نمط الاستعلام (يتم حفظ الكرات). عندما يسبق الكرة الأرض !
أو A ^
، يتخطى الملفات التي يتطابق اسمها عبر العالم عندما يحتوي الكرة الأرضية على /
مسارات كاملة. وإلا تتم مطابقة الأسماء الأساسية. عندما تنتهي الكرة الأرضية مع A /
، تتم مطابقة الدلائل.Q>
(Normal) و F>
(السلاسل الثابتة) و G>
(REGEX الأساسية) و P>
(مطابقة Perl) و Z>
(المطابقة الغامضة). عندما يتم عرض- --glob=
موجه ، يمكن إدخال قائمة مفصولة بفاصلة لأنماط الكرات على غرار Gitignore. Pressing ESC إرجاع التحكم إلى موجه النمط.--view
.--view=COMMAND
. خلاف ذلك ، يتم استخدام متغيرات بيئة PAGER
أو EDITOR
لاستدعاء الأمر مع Ctrl-Y. يجب تمكين أسماء الملفات ومرئية في الإخراج لاستخدام هذه الميزة.--color
.DELAY
منخفضة مثل 1. ومع ذلك ، قد تزيد القيم المنخفضة من تحميل النظام نتيجة لبدء عمليات البحث وإلغاء كل مفتاح مرارًا وتكرارًا.--heading
افتراضيًا. اضغط على ALT-+ لتبديل العناوين.الاستعلام عن خرائط مفتاح TUI:
المفتاح (s) | وظيفة |
---|---|
Alt-key | تبديل خيار سطر الأوامر Ugrep المقابل key |
Alt-/ xxxx / | أدخل نقطة رمز hex unicode u+xxxx |
Esc Ctrl-C | عد أو الخروج |
Ctrl-Q | خروج سريع وإخراج النتائج المحددة في وضع الاختيار |
Tab | chdir إلى دليل الملف الموضح في الجزء العلوي من الشاشة أو حدد الملف |
Shift-Tab | chdir مستوى واحد لأعلى أو إلغاء تحديد ملف |
Enter | أدخل وضع التحديد وتبديل الخطوط المحددة للإخراج عند الخروج |
Up Ctrl-P | تحرك للأعلى |
Down Ctrl-N | تحرك للأسفل |
Left Ctrl-B | تحرك لليسار |
Right Ctrl-F | التحرك الصحيح |
PgUp Ctrl-G | انقل العرض لأعلى بصفحة |
PgDn Ctrl-D | انقل العرض لأسفل بصفحة |
Alt-Up | انقل العرض لأعلى بصفحة 1/2 (MacOS Shift-Up ) |
Alt-Down | انقل العرض لأسفل بصفحة 1/2 (MacOS Shift-Down ) |
Alt-Left | انقل الشاشة اليسار بصفحة 1/2 (MacOS Shift-Left ) |
Alt-Right | انقل العرض يمينًا على بعد 1/2 صفحة (MACOS Shift-Right ) |
Home Ctrl-A | انقل المؤشر إلى بداية الخط |
End Ctrl-E | انقل المؤشر إلى نهاية الخط |
Ctrl-K | حذف بعد المؤشر |
Ctrl-L | تحديث الشاشة |
Ctrl-O + key | تبديل خيار سطر الأوامر ugrep المقابل key ، مثل Alt-key |
Ctrl-R F4 | القفز إلى المرجعية |
Ctrl-S | القفز إلى DIR/الملف/السياق التالي |
Ctrl-T F5 | شاشة تبديل تقسيم ( --split يبدأ توي شاشة مقسمة) |
Ctrl-U | حذف قبل المؤشر |
Ctrl-V | شخصية حرفية |
Ctrl-W | القفز مرة أخرى dir/ملف/سياق |
Ctrl-X F3 | تعيين المرجعية |
Ctrl-Y F2 | عرض أو تحرير الملف المعروض في الجزء العلوي من الشاشة |
Ctrl-Z F1 | عرض المساعدة والخيارات |
Ctrl-^ | عودة chdir إلى دليل العمل البدء |
Ctrl-] | تبديل اللون/أحادي |
Ctrl- | إنهاء العملية |
للبحث بشكل تفاعلي في الملفات في دليل العمل وتحت:
ug -Q
نفس الشيء ، ولكن يقتصر على ملفات C ++ فقط وتجاهل ملفات .gitignore
:
ug -Q -tc++ --ignore-files
للبحث بشكل تفاعلي جميع Makefiles في دليل العمل وأقل:
ug -Q -g 'Makefile*' -g 'makefile*'
نفس الشيء ، ولكن لمستوى دليل تصل إلى 2 (العمل ومستوى دليل فرعي واحد):
ug -Q -2 -g 'Makefile*' -g 'makefile*'
لعرض محتويات main.cpp
بشكل تفاعلي وابحث عنها ، حيث تُظهر -y
خطوط غير متوفرة كسياق:
ug -Q -y main.cpp
للبحث بشكل تفاعلي main.cpp
، بدءًا من نمط البحث TODO
وسياق تطابق من 5 أسطر (يمكن تمكين السياق بشكل تفاعلي وتعطيله ، فإن هذا يتجاوز أيضًا حجم السياق الافتراضي لخطين):
ug -Q -C5 -e TODO main.cpp
لعرض وابحث محتويات الأرشيف (على سبيل المثال Zip ، Tarball):
ug -Q -z archive.tar.gz
لتحديد الملفات بشكل تفاعلي من project.zip
لإلغاء الضغط مع unzip
، باستخدام وضع تحديد استعلام UGREP (اضغط على ENTER لتحديد الخطوط):
unzip project.zip `zipinfo -1 project.zip | ugrep -Q`
؟ العودة إلى جدول المحتويات
-L, --files-without-match
Only the names of files not containing selected lines are written
to standard output. Pathnames are listed once per file searched.
If the standard input is searched, the string ``(standard input)''
is written.
-l, --files-with-matches
Only the names of files containing selected lines are written to
standard output. ugrep will only search a file until a match has
been found, making searches potentially less expensive. Pathnames
are listed once per file searched. If the standard input is
searched, the string ``(standard input)'' is written.
-R, --dereference-recursive
Recursively read all files under each directory. Follow all
symbolic links to files and directories, unlike -r.
-r, --recursive
Recursively read all files under each directory, following symbolic
links only if they are on the command line. Note that when no FILE
arguments are specified and input is read from a terminal,
recursive searches are performed as if -r is specified.
-S, --dereference-files
When -r is specified, symbolic links to files are followed, but not
to directories. The default is not to follow symbolic links.
--depth=[MIN,][MAX], -1, -2, -3, ... -9, -10, -11, -12, ...
Restrict recursive searches from MIN to MAX directory levels deep,
where -1 (--depth=1) searches the specified path without recursing
into subdirectories. Note that -3 -5, -3-5, and -35 search 3 to 5
levels deep. Enables -r if -R or -r is not specified.
-g GLOBS, --glob=GLOBS
Search only files whose name matches the specified comma-separated
list of GLOBS, same as --include='glob' for each `glob' in GLOBS.
When a `glob' is preceded by a `!' or a `^', skip files whose name
matches `glob', same as --exclude='glob'. When `glob' contains a
`/', full pathnames are matched. Otherwise basenames are matched.
When `glob' ends with a `/', directories are matched, same as
--include-dir='glob' and --exclude-dir='glob'. A leading `/'
matches the working directory. This option may be repeated and may
be combined with options -M, -O and -t to expand searches. See
`ugrep --help globs' and `man ugrep' section GLOBBING for details.
-O EXTENSIONS, --file-extension=EXTENSIONS
Search only files whose filename extensions match the specified
comma-separated list of EXTENSIONS, same as --include='*.ext' for
each `ext' in EXTENSIONS. When `ext' is preceded by a `!' or a
`^', skip files whose filename extensions matches `ext', same as
--exclude='*.ext'. This option may be repeated and may be combined
with options -g, -M and -t to expand the recursive search.
-t TYPES, --file-type=TYPES
Search only files associated with TYPES, a comma-separated list of
file types. Each file type corresponds to a set of filename
extensions passed to option -O and filenames passed to option -g.
For capitalized file types, the search is expanded to include files
with matching file signature magic bytes, as if passed to option
-M. When a type is preceded by a `!' or a `^', excludes files of
the specified type. This option may be repeated.
--stats
Output statistics on the number of files and directories searched,
and the inclusion and exclusion constraints applied.
إذا لم يتم تحديد وسيطات ملف وإدخال إدخال من محطة ، فسيتم إجراء عمليات البحث العودية كما لو تم تحديد -r
. لإجبار القراءة من الإدخال القياسي ، حدد -
كوسيطة الملف.
لإدراج جميع الملفات غير الفارغة في دليل العمل بشكل متكرر:
ug -r -l ''
لإدراج جميع الملفات غير الفارغة في دليل العمل ولكن ليس أعمق (نظرًا لوجود وسيطة ملف ، في هذه الحالة .
بالنسبة إلى دليل العمل):
ug -l '' .
لإدراج جميع الملفات غير الفارغة في دليل mydir
ولكن ليس أعمق (منذ إعطاء وسيطة ملف):
ug -l '' mydir
لإدراج جميع الملفات غير الفارغة في دليل mydir
وأعمق أثناء اتباع Symlinks:
ug -R -l '' mydir
لسرد جميع الملفات غير الفارغة على المسار المحدد بشكل متكرر ، أثناء زيارة الدلائل الفرعية فقط ، يتم زيارة الدلائل mydir/
والمؤلفين الفرعيين في مستوى واحد mydir/*/
يتم زيارة (لاحظ أنه يمكن اختصار -2 -l
إلى -l2
):
ug -2 -l '' mydir
لسرد جميع الملفات غير الفارغة في دليل mydir
، لا تتبع أي روابط رمزية (باستثناء عندما تكون على سطر الأوامر مثل mydir
):
ug -rl '' mydir
لسرد جميع Makefiles بشكل متكرر المطابقة للنص CPP
:
ug -l -tmake 'CPP'
لسرد جميع Makefile.*
مطابقة bin_PROGRAMS
:
ug -l -g'Makefile.*' 'bin_PROGRAMS'
لسرد جميع الملفات غير الفارغة بشكل متكرر مع -Osh
.
ug -l -Osh ''
لسرد جميع البرامج النصية Shell بشكل متكرر على أساس الامتدادات و shebangs مع -tShell
:
ug -l -tShell ''
لسرد جميع البرامج النصية Shell بشكل متكرر على أساس الامتدادات فقط مع -tshell
:
ug -l -tshell ''
؟ العودة إلى جدول المحتويات
--bool, -%, -%%
Specifies Boolean query patterns. A Boolean query pattern is
composed of `AND', `OR', `NOT' operators and grouping with `(' `)'.
Spacing between subpatterns is the same as `AND', `|' is the same
as `OR' and a `-' is the same as `NOT'. The `OR' operator binds
more tightly than `AND'. For example, --bool 'A|B C|D' matches
lines with (`A' or `B') and (`C' or `D'), --bool 'A -B' matches
lines with `A' and not `B'. Operators `AND', `OR', `NOT' require
proper spacing. For example, --bool 'A OR B AND C OR D' matches
lines with (`A' or `B') and (`C' or `D'), --bool 'A AND NOT B'
matches lines with `A' without `B'. Quoted subpatterns are matched
literally as strings. For example, --bool 'A "AND"|"OR"' matches
lines with `A' and also either `AND' or `OR'. Parentheses are used
for grouping. For example, --bool '(A B)|C' matches lines with `A'
and `B', or lines with `C'. Note that all subpatterns in a Boolean
query pattern are regular expressions, unless -F is specified.
Options -E, -F, -G, -P and -Z can be combined with --bool to match
subpatterns as strings or regular expressions (-E is the default.)
This option does not apply to -f FILE patterns. The double short
option -%% enables options --bool --files. Option --stats displays
the Boolean search patterns applied. See also options --and,
--andnot, --not, --files and --lines.
--files
Boolean file matching mode, the opposite of --lines. When combined
with option --bool, matches a file if all Boolean conditions are
satisfied. For example, --bool --files 'A B|C -D' matches a file
if some lines match `A', and some lines match either `B' or `C',
and no line matches `D'. See also options --and, --andnot, --not,
--bool and --lines. The double short option -%% enables options
--bool --files.
--lines
Boolean line matching mode for option --bool, the default mode.
--and [[-e] PATTERN] ... -e PATTERN
Specify additional patterns to match. Patterns must be specified
with -e. Each -e PATTERN following this option is considered an
alternative pattern to match, i.e. each -e is interpreted as an OR
pattern. For example, -e A -e B --and -e C -e D matches lines with
(`A' or `B') and (`C' or `D'). Note that multiple -e PATTERN are
alternations that bind more tightly together than --and. Option
--stats displays the search patterns applied. See also options
--not, --andnot, and --bool.
--andnot [[-e] PATTERN] ...
Combines --and --not. See also options --and, --not, and --bool.
--not [-e] PATTERN
Specifies that PATTERN should not match. Note that -e A --not -e B
matches lines with `A' or lines without a `B'. To match lines with
`A' that have no `B', specify -e A --andnot -e B. Option --stats
displays the search patterns applied. See also options --and,
--andnot, and --bool.
--stats
Output statistics on the number of files and directories searched,
and the inclusion and exclusion constraints applied.
لاحظ -e PATTERN
خيارات --and
--not
، --andnot
.
يجعل خيار -%
جميع الأنماط المستندة إلى منطقية ، مما يدعم العمليات المنطقية التالية المدرجة من أعلى مستوى الأسبقية إلى أدنى:
المشغل | بديل | نتيجة |
---|---|---|
"x" | تطابق x حرفيًا ونا بالضبط كما هو محدد (باستخدام regex القياسي Q و E ) | |
( ) | تجميع التعبير المنطقي | |
-x | NOT x | المباراة المقلوبة ، أي مباريات إذا كانت x لا تتطابق |
x|y | x OR y | يطابق الخطوط مع x أو y |
xy | x AND y | يطابق الخطوط مع كل من x و y |
x
و y
هما فرعين لا تبدأ مع الرموز الخاصة |
، -
، (
(استخدم عروض الأسعار أو Escape لمطابقة هذه) ؛
-
هي نفسها وتتخذ الأسبقية OR
، مما يعني أن -x|y
== (-x) NOT
(-x)|y
على سبيل المثال.
|
و OR
هي نفسها وتأخذ الأسبقية AND
مما يعني أن xy|z
== x (y|z)
على سبيل المثال ؛
يعرض خيار- --stats
الاستعلامات المنطقية في شكل قابل للقراءة البشرية التي تم تحويلها إلى CNF (الشكل العادي الملتحمة) ، بعد اكتمال البحث. لإظهار CNF بدون بحث ، اقرأ من المدخلات القياسية التي تم إنهاءها بواسطة EOF ، مثل echo | ugrep -% '...' --stats
.
يتم إضاءة الأشكال الفرعية في الإخراج ، باستثناء تلك التي تم إلغاؤها مع NOT
(قد NOT
يزال هناك فرع فرعي يظهر في خط مطابقة عند استخدام نمط أو لا مثل x|-y
). لاحظ أن الأطعمة الفرعية قد تتداخل. في هذه الحالة ، فقط أول مطابقة لمطابقة اللون المرتفع.
قد تتم مطابقة خطوط متعددة عندما تتطابق Subpatterns Newlines. ومع ذلك ، هناك استثناء واحد: قد لا تتطابق Subpatterns مع (?=X)
lookaheads عندما يمتد X
خطوط متعددة.
تتطابق الأنماط الفارغة لأي سطر (GREP Standard). لذلك ، -% 'x|""|y'
يطابق كل شيء و x
و y
ليسوا ذوو اللون المرتفع. يجب استخدام الخيار -y
لإظهار كل سطر كسياق ، على سبيل المثال -y 'x|y'
.
الاستعلام التفاعلي الشبيه بـ FZF (البحث المنطقي مع سلاسل ثابتة مع مطابقة غامضة للسماح على سبيل المثال ما يصل إلى 4 أحرف إضافية متطابقة مع -Z+4
بالكلمات مع -w
) ، اضغط على TAB و ALT -Y لعرض ملف مع المطابقات. اضغط على Shift-Tab و Alt-L للعودة إلى قائمة الملفات المطابقة:
ug -Q -%% -l -w -F -Z+4 --sort=best
للعثور بشكل متكرر على جميع الملفات التي تحتوي على كل من hot
dog
في أي مكان في الملف مع الخيار --files
:
ug -%% 'hot dog'
ug --files -e hot --and dog
للعثور على خطوط تحتوي على كل من hot
dog
في myfile.txt
:
ug -% 'hot dog' myfile.txt
ug -e hot --and dog myfile.txt
للعثور على خطوط تحتوي على place
ثم hotdog
أو taco
(أو كليهما) في myfile.txt
:
ug -% 'hotdog|taco place' myfile.txt
ug -e hotdog -e taco --and place myfile.txt
نفس الشيء ، ولكن استبعاد خطوط مطابقة diner
:
ug -% 'hotdog|taco place -diner' myfile.txt
ug -e hotdog -e taco --and place --andnot diner myfile.txt
للعثور على خطوط مع diner
أو الخطوط التي تتطابق مع كل من fast
food
ولكن ليس bad
في myfile.txt
:
ug -% 'diner|(fast food -bad)' myfile.txt
للعثور على خطوط مع fast food
(بالضبط) أو خطوط مع diner
ولكن ليست bad
أو old
في myfile.txt
:
ug -% '"fast food"|diner -bad -old' myfile.txt
نفس الشيء ، ولكن باستخدام تعبير منطقي مختلف له نفس المعنى:
ug -% '"fast food"|diner -(bad|old)' myfile.txt
للعثور على خطوط مع diner
مما يدل على good
في myfile.txt
(أي ، إظهار خطوط good
بدون diner
وإظهار خطوط مع diner
ولكن فقط مع good
، وهو أمر منطقي!):
ug -% 'good|-diner' myfile.txt
ug -e good --not diner myfile.txt
للعثور على خطوط مع foo
و -bar
و "baz"
في myfile.txt
(وليس ذلك -
"
يجب أن تتوافق باستخدام escapes و
--and -e -bar
):
ug -% 'foo -bar "baz"' myfile.txt
ug -e foo --and -e -bar --and '"baz"' myfile.txt
للبحث عن myfile.cpp
عن خطوط مع TODO
أو FIXME
ولكن ليس كلاهما على نفس الخط ، مثل XOR:
ug -% 'TODO|FIXME -(TODO FIXME)' myfile.cpp
ug -e TODO -e FIXME --and --not TODO --not FIXME myfile.cpp
؟ العودة إلى جدول المحتويات
-e PATTERN, --regexp=PATTERN
Specify a PATTERN to search the input. An input line is selected
if it matches any of the specified patterns. This option is useful
when multiple -e options are used to specify multiple patterns, or
when a pattern begins with a dash (`-'), or to specify a pattern
after option -f or after the FILE arguments.
-f FILE, --file=FILE
Read newline-separated patterns from FILE. White space in patterns
is significant. Empty lines in FILE are ignored. If FILE does not
exist, the GREP_PATH environment variable is used as path to FILE.
If that fails, looks for FILE in /usr/local/share/ugrep/pattern.
When FILE is a `-', standard input is read. This option may be
repeated.
-L, --files-without-match
Only the names of files not containing selected lines are written
to standard output. Pathnames are listed once per file searched.
If the standard input is searched, the string ``(standard input)''
is written.
-N PATTERN, --neg-regexp=PATTERN
Specify a negative PATTERN to reject specific -e PATTERN matches
with a counter pattern. Note that longer patterns take precedence
over shorter patterns, i.e. a negative pattern must be of the same
length or longer to reject matching patterns. Option -N cannot be
specified with -P. This option may be repeated.
-v, --invert-match
Selected lines are those not matching any of the specified
patterns.
-w, --word-regexp
The PATTERN is searched for as a word, such that the matching text
is preceded by a non-word character and is followed by a non-word
character. Word-like characters are Unicode letters, digits and
connector punctuations such as underscore.
-x, --line-regexp
Select only those matches that exactly match the whole line, as if
the patterns are surrounded by ^ and $.
انظر أيضًا أنماط الاستعلام المنطقية مع -٪ ، -٪٪ ، و - - -لا للاختيار أكثر من خيارات الاستعلام المنطقية أكثر من خيارات GREP GREP التقليدية.
لعرض خطوط في ملف myfile.sh
ولكن ليس الخطوط مطابقة ^[ t]*#
:
ug -v '^[ t]*#' myfile.sh
للبحث عن myfile.cpp
عن خطوط مع FIXME
urgent
، ولكن ليس Scotty
:
ugrep FIXME myfile.cpp | ugrep urgent | ugrep -v Scotty
نفس الشيء ، ولكن باستخدام -%
للاستعلامات المنطقية:
ug -% 'FIXME urgent -Scotty' myfile.cpp
للبحث عن العشرية باستخدام Pattern d+
التي لا تبدأ بـ 0
باستخدام النمط السلبي 0d+
واستبعاد 555
:
ug -e 'd+' -N '0d+' -N 555 myfile.cpp
للبحث عن الكلمات التي تبدأ بـ disp
دون مطابقة display
في ملف myfile.py
باستخدام "نمط سلبي" -N '/<display>'
حيث يحدد -N
نمطًا سلبيًا إضافيًا لتخطي التطابقات:
ug -e '<disp' -N '<display>' myfile.py
للبحث عن خطوط مع display
كلمة في ملف myfile.py
تخطي هذه الكلمة في الأوتار والتعليقات ، حيث يحدد -f
الأنماط في الملفات التي هي أنماط محددة مسبقًا في هذه الحالة:
ug -n -w 'display' -f python/zap_strings -f python/zap_comments myfile.py
لعرض الخطوط التي ليست أسطر فارغة:
ug -x -e '.*' -N 'h*' myfile.py
نفس الشيء ، ولكن باستخدام -v
و -x
مع h*
، أي نمط ^h*$
:
ug -v -x 'h*' myfile.py
لسرد جميع ملفات Python التي لا تحتوي على كلمة display
، مما يسمح للكلمة بحدوثه في الأوتار والتعليقات:
ug -RL -tPython -w 'display' -f python/zap_strings -f python/zap_comments
؟ العودة إلى جدول المحتويات
--encoding=ENCODING
The encoding format of the input. The default ENCODING is binary
and UTF-8 which are the same. Note that option -U specifies binary
PATTERN matching (text matching is the default.)
لا تتطلب ملفات Binary و ASCII و UTF-8 هذا الخيار للبحث عنها. أيضًا لا تتطلب ملفات UTF-16 و UTF-32 هذا الخيار للبحث عنها ، على افتراض أن ملفات UTF-16 و UTF-32 تبدأ مع علامة UTF BOM (علامة ترتيب البايت) كالمعتاد. تتطلب ترميزات الملفات الأخرى خيار --encoding=ENCODING
:
الترميز | المعلمة |
---|---|
ASCII | غير متوفر |
UTF-8 | غير متوفر |
UTF-16 مع BOM | غير متوفر |
UTF-32 مع BOM | غير متوفر |
UTF-16 يكون ث/س بوم | UTF-16 أو UTF-16BE |
UTF-16 LE W/O BOM | UTF-16LE |
UTF-32 W/O BOM | UTF-32 أو UTF-32BE |
UTF-32 W/O BOM | UTF-32LE |
لاتيني -1 | LATIN1 أو ISO-8859-1 |
ISO-8859-1 | ISO-8859-1 |
ISO-8859-2 | ISO-8859-2 |
ISO-8859-3 | ISO-8859-3 |
ISO-8859-4 | ISO-8859-4 |
ISO-8859-5 | ISO-8859-5 |
ISO-8859-6 | ISO-8859-6 |
ISO-8859-7 | ISO-8859-7 |
ISO-8859-8 | ISO-8859-8 |
ISO-8859-9 | ISO-8859-9 |
ISO-8859-10 | ISO-8859-10 |
ISO-8859-11 | ISO-8859-11 |
ISO-8859-13 | ISO-8859-13 |
ISO-8859-14 | ISO-8859-14 |
ISO-8859-15 | ISO-8859-15 |
ISO-8859-16 | ISO-8859-16 |
Mac (CR = NewLine) | MAC |
Macroman (CR = Newline) | MACROMAN |
ebcdic | EBCDIC |
رمز DOS صفحة 437 | CP437 |
رمز DOS صفحة 850 | CP850 |
رمز DOS صفحة 858 | CP858 |
رمز Windows صفحة 1250 | CP1250 |
رمز Windows صفحة 1251 | CP1251 |
رمز Windows صفحة 1252 | CP1252 |
رمز Windows صفحة 1253 | CP1253 |
رمز Windows صفحة 1254 | CP1254 |
رمز Windows صفحة 1255 | CP1255 |
رمز Windows صفحة 1256 | CP1256 |
رمز Windows صفحة 1257 | CP1257 |
رمز Windows صفحة 1258 | CP1258 |
Koi8-R | KOI8-R |
Koi8-U | KOI8-U |
KOI8-RU | KOI8-RU |
لاحظ أن أنماط Regex يتم تحديدها دائمًا في UTF-8 (تتضمن ASCII). للبحث في الملفات الثنائية ذات الأنماط الثنائية ، راجع البحث وعرض الملفات الثنائية مع -U و -W و -X.
لإدراج جميع الملفات التي هي ASCII بشكل متكرر (أي 7 بت):
ug -L '[^[:ascii:]]'
لإدراج جميع الملفات التي لا تتوافق مع ملفات UNSII ، أي UTF-8 و UTF-16 و UTF-32 مع أحرف Unicode غير ASCII (U+0080 وما فوق):
ug -l '[^[:ascii:]]'
للتحقق مما إذا كان الملف يحتوي على Unicode غير ASCII (U+0080 وما فوق):
ug -q '[^[:ascii:]]' myfile && echo "contains Unicode"
لإزالة أحرف Unicode غير صالحة من ملف (لاحظ أنه قد لا يعمل -o
لأنه يتم اكتشاف البيانات الثنائية ورفضها وإضافة الخطوط الجديدة ، ولكن --format="%o%
لا تتحقق من الثنائي ونسخ المباراة" كما هو "كما هو" كما هو "كما هو" كما هو "كما هو" كما هو ". ):
ug "[p{Unicode}n]" --format="%o" badfile.txt
لسرد الملفات بشكل متكرر مع محتوى UTF غير صالح (أي تسلسل أو ملفات بايت UTF-8 غير صالحة التي تحتوي على أي نقاط رمز UTF-8/16/32 خارج نطاق Unicode الصحيح) عن طريق مطابقة أي نقطة رمز مع .
وباستخدام نمط سلبي -N 'p{Unicode}'
لتجاهل كل حرف Unicode صالح:
ug -l -e '.' -N 'p{Unicode}'
لعرض خطوط تحتوي على رموز تعبيرية للضحك:
ug '[?-?]' emojis.txt
يتم الحصول على نفس النتائج باستخدام x{hhhh}
لتحديد نطاق أحرف Unicode:
ug '[x{1F600}-x{1F60F}]' emojis.txt
لعرض خطوط تحتوي على أسماء Gödel (أو Goedel) أو Escher أو Bach:
ug 'G(ö|oe)del|Escher|Bach' GEB.txt wiki.txt
للبحث عن lorem
في الحالة السفلية أو العليا في ملف UTF-16 الذي يتميز بوم UTF-16:
ug -iw 'lorem' utf16lorem.txt
للبحث في UTF16LOREM.TXT عندما لا يحتوي هذا الملف على UTF-16 BOM ، باستخدام --encoding
:
ug --encoding=UTF-16 -iw 'lorem' utf16lorem.txt
للبحث عن ملف spanish-iso.txt
مشفر في ISO-8859-1:
ug --encoding=ISO-8859-1 -w 'año' spanish-iso.txt
؟ العودة إلى جدول المحتويات
-o, --only-matching
Output only the matching part of lines. If -A, -B or -C is
specified, fits the match and its context on a line within the
specified number of columns.
قد تتم مطابقة خطوط متعددة بأنماط تتطابق مع أحرف NewLine. استخدم الخيار -o
لإخراج المطابقة فقط ، وليس الخطوط الكاملة (الخطوط) التي تتطابق.
لمطابقة كسر خط n
، قم بتضمين n
في النمط لمطابقة حرف LF. إذا كنت ترغب في مطابقة rn
و n
، استخدم r?n
أو ببساطة استخدم R
لمطابقة أي خط حدود rn
، r
، v
، f
، n
، u +0085 ، U+2028 و U+2029.
لمطابقة C/C ++ /*...*/
التعليقات المتعددة:
ug '/*(.*n)*?.**+/' myfile.cpp
لمطابقة التعليقات C/C ++ باستخدام أنماط c/comments
المحددة مسبقًا مع -fc/comments
، مقصورة على الجزء المطابق فقط مع الخيار -o
:
ug -of c/comments myfile.cpp
مثل sed -n '/begin/,/end/p'
: لمطابقة جميع الخطوط بين سطر يحتوي على begin
والخط الأول بعد ذلك end
، باستخدام التكرار الكسول:
ug -o '.*begin(.|n)*?end.*' myfile.txt
؟ العودة إلى جدول المحتويات
-A NUM, --after-context=NUM
Output NUM lines of trailing context after matching lines. Places
a --group-separator between contiguous groups of matches. If -o is
specified, output the match with context to fit NUM columns after
the match or shortens the match. See also options -B, -C and -y.
-B NUM, --before-context=NUM
Output NUM lines of leading context before matching lines. Places
a --group-separator between contiguous groups of matches. If -o is
specified, output the match with context to fit NUM columns before
the match or shortens the match. See also options -A, -C and -y.
-C NUM, --context=NUM
Output NUM lines of leading and trailing context surrounding each
matching line. Places a --group-separator between contiguous
groups of matches. If -o is specified, output the match with
context to fit NUM columns before and after the match or shortens
the match. See also options -A, -B and -y.
-y, --any-line
Any line is output (passthru). Non-matching lines are output as
context with a `-' separator. See also options -A, -B, and -C.
--width[=NUM]
Truncate the output to NUM visible characters per line. The width
of the terminal window is used if NUM is not specified. Note that
double wide characters in the output may result in wider lines.
-o, --only-matching
Output only the matching part of lines. If -A, -B or -C is
specified, fits the match and its context on a line within the
specified number of columns.
لعرض سطرين من السياق قبل وبعد خط مطابقة:
ug -C2 'FIXME' myfile.cpp
لإظهار ثلاثة أسطر من السياق بعد خط متطابق:
ug -A3 'FIXME.*' myfile.cpp:
لعرض سطر واحد من السياق قبل كل سطر مطابقة مع تعريف دالة C (أسماء C غير uniCode):
ug -B1 -f c/functions myfile.c
لعرض سطر واحد من السياق قبل كل سطر مطابقة مع تعريف دالة C ++ (قد تكون أسماء C ++ أحادية):
ug -B1 -f c++/functions myfile.cpp
لعرض أي خطوط غير متطابقة كسياق لمطابقة الخطوط مع -y
:
ug -y -f c++/functions myfile.cpp
لعرض hexdump لخط مطابق مع سطر واحد من سياق Hexdump:
ug -C1 -UX 'xaaxbbxcc' a.out
يتم عرض السياق داخل سطر مع الخيار -o
مع خيار السياق:
ug -o -C20 'pattern' myfile.cpp
نفس الشيء ، ولكن مع الإخراج الجميل مع العناوين وأرقام الأسطر وأرقام الأعمدة ( -k
) وإظهار السياق:
ug --pretty -oC20 'pattern' myfile.cpp
؟ العودة إلى جدول المحتويات
-f FILE, --file=FILE
Read newline-separated patterns from FILE. White space in patterns
is significant. Empty lines in FILE are ignored. If FILE does not
exist, the GREP_PATH environment variable is used as path to FILE.
If that fails, looks for FILE in /usr/local/share/ugrep/pattern.
When FILE is a `-', standard input is read. This option may be
repeated.
--ignore-files[=FILE]
Ignore files and directories matching the globs in each FILE that
is encountered in recursive searches. The default FILE is
`.gitignore'. Matching files and directories located in the
directory of the FILE and in subdirectories below are ignored.
Globbing syntax is the same as the --exclude-from=FILE gitignore
syntax, but files and directories are excluded instead of only
files. Directories are specifically excluded when the glob ends in
a `/'. Files and directories explicitly specified as command line
arguments are never ignored. This option may be repeated to
specify additional files.
-g GLOBS, --glob=GLOBS
Search only files whose name matches the specified comma-separated
list of GLOBS, same as --include='glob' for each `glob' in GLOBS.
When a `glob' is preceded by a `!' or a `^', skip files whose name
matches `glob', same as --exclude='glob'. When `glob' contains a
`/', full pathnames are matched. Otherwise basenames are matched.
When `glob' ends with a `/', directories are matched, same as
--include-dir='glob' and --exclude-dir='glob'. A leading `/'
matches the working directory. This option may be repeated and may
be combined with options -M, -O and -t to expand searches. See
`ugrep --help globs' and `man ugrep' section GLOBBING for details.
-O EXTENSIONS, --file-extension=EXTENSIONS
Search only files whose filename extensions match the specified
comma-separated list of EXTENSIONS, same as --include='*.ext' for
each `ext' in EXTENSIONS. When `ext' is preceded by a `!' or a
`^', skip files whose filename extensions matches `ext', same as
--exclude='*.ext'. This option may be repeated and may be combined
with options -g, -M and -t to expand the recursive search.
-t TYPES, --file-type=TYPES
Search only files associated with TYPES, a comma-separated list of
file types. Each file type corresponds to a set of filename
extensions passed to option -O and filenames passed to option -g.
For capitalized file types, the search is expanded to include files
with matching file signature magic bytes, as if passed to option
-M. When a type is preceded by a `!' or a `^', excludes files of
the specified type. This option may be repeated.
--stats
Output statistics on the number of files and directories searched,
and the inclusion and exclusion constraints applied.
يتم سرد أنواع الملفات مع ugrep -tlist
. تعتمد القائمة على ملحقات اسم الملف المعمول بها و "بايت سحري". إذا كان لديك نوع ملف غير مدرج ، فاستخدم الخيارات -O
و/أو -M
. قد ترغب في تحديد الاسم المستعار ، على سبيل المثال alias ugft='ugrep -Oft'
كاختزال للبحث عن الملفات باستخدام Filename Faceix .ft
.
لعرض تعريفات الوظائف بشكل متكرر -n
ملفات C/ -f c++/functions
-tc++
( .h
.cpp
.hpp
-o
.c
،
ug -on -tc++ -f c++/functions
لعرض تعريفات الوظائف بشكل متكرر في ملفات .c
و .cpp
مع أرقام الأسطر مع -Oc,cpp
و -o
و -n
و -f c++/functions
:
ug -on -Oc,cpp -f c++/functions
لسرد جميع ملفات shell بشكل متكرر مع -tShell
لمطابقة امتدادات اسم الملف والملفات مع shell shebangs ، باستثناء الملفات التي تحتوي على لاحقة .sh
:
ug -l -tShell -O^sh ''
لسرد جميع الملفات غير المتكررة مع -t^Shell
:
ug -l -t^Shell ''
لإدراج جميع ملفات shell بشكل متكرر مع shell shebangs التي لا تحتوي على امتدادات اسم ملف shell:
ug -l -tShell -t^shell ''
للبحث عن خطوط مع FIXME
في تعليقات C/C ++ ، باستثناء FIXME
في سلاسل متعددة الخطوط:
ug -n 'FIXME' -f c++/zap_strings myfile.cpp
لقراءة الأنماط TODO
و FIXME
من الإدخال القياسي لمطابقة الخطوط في الإدخال ، مع استبعاد التطابقات في سلاسل C ++:
ug -on -f - -f c++/zap_strings myfile.cpp <<END
TODO
FIXME
END
لعرض علامات عنصر XML وعلامات السمة في ملف XML ، مقصورة على الجزء المطابق مع -o
، باستثناء العلامات التي يتم وضعها في التعليقات (متعددة الخطوط):
ug -o -f xml/tags -f xml/zap_comments myfile.xml
؟ العودة إلى جدول المحتويات
-z, --decompress
Search compressed files and archives. Archives (.cpio, .pax, .tar)
and compressed archives (e.g. .zip, .7z, .taz, .tgz, .tpz, .tbz,
.tbz2, .tb2, .tz2, .tlz, .txz, .tzst) are searched and matching
pathnames of files in archives are output in braces. When used
with option --zmax=NUM, searches the contents of compressed files
and archives stored within archives up to NUM levels. If -g, -O,
-M, or -t is specified, searches files stored in archives whose
filenames match globs, match filename extensions, match file
signature magic bytes, or match file types, respectively.
Supported compression formats: gzip (.gz), compress (.Z), zip, 7z,
bzip2 (requires suffix .bz, .bz2, .bzip2, .tbz, .tbz2, .tb2, .tz2),
lzma and xz (requires suffix .lzma, .tlz, .xz, .txz),
lz4 (requires suffix .lz4),
zstd (requires suffix .zst, .zstd, .tzst),
brotli (requires suffix .br),
bzip3 (requires suffix .bz3).
--zmax=NUM
When used with option -z (--decompress), searches the contents of
compressed files and archives stored within archives by up to NUM
expansion stages. The default --zmax=1 only permits searching
uncompressed files stored in cpio, pax, tar, zip and 7z archives;
compressed files and archives are detected as binary files and are
effectively ignored. Specify --zmax=2 to search compressed files
and archives stored in cpio, pax, tar, zip and 7z archives. NUM
may range from 1 to 99 for up to 99 decompression and de-archiving
steps. Increasing NUM values gradually degrades performance.
الملفات المضغوطة بـ GZIP ( .gz
) ، ضغط ( .Z
) ، BZIP2 ( .bz
، .bz2
، .bzip2
) ، LZMA ( .lzma
) ، XZ ( .xz
) ، LZ4 ( .lz4
) ، ZSTD ( .zst
، .zstd
) ، Brotli ( .br
) و Bzip3 ( .bz3
) تم البحث مع الخيار -z
عند تثبيت المكتبات المقابلة وتجميعها باستخدام UGREP. لا يتطلب هذا الخيار ضغط الملفات. يتم البحث في الملفات غير المضغوطة أيضًا ، على الرغم من أبطأها.
يمكن البحث في تنسيقات ضغط أخرى باستخدام مرشحات UGrep .
يتم البحث عن المحفوظات (CPIO ، JAR ، PAX ، TAR ، ZIP و 7Z) مع الخيار -z
. يتم إخراج الملفات العادية في أرشيف يتطابق مع أسماء Archive PathNames المحاطة بأقواس {
و }
. تنسيقات القطران المدعومة هي V7 و USTAR و GNU و OLDGNU و PAX. تنسيقات CPIO المدعومة هي ODC و Newc و CRC. غير مدعوم هو تنسيق CPIO الثنائي القديم غير القديم. يتم التعرف على تنسيقات الأرشيف CPIO و TAR و PAX تلقائيًا باستخدام الخيار -z
بناءً على محتواها ، بغض النظر عن لاحقة اسم الملف.
بشكل افتراضي ، يتم البحث عن المحفوظات غير المضغوطة المخزنة داخل أرشيفات الرمز البريدي: يتم التعرف على جميع ملفات CPIO و PAX و TAR المخزنة في أرشيفات ZIP و 7Z تلقائيًا وتفتيشها. ومع ذلك ، بشكل افتراضي ، لم يتم التعرف على الملفات المضغوطة المخزنة داخل الأرشيف ، على سبيل المثال ، لا يتم البحث في ملفات zip المخزنة داخل ملفات TAR ، بل يتم تفتيش جميع الملفات المضغوطة والمحفوظات كما لو كانت ملفات ثنائية دون إلغاء ضغطها.
حدد --zmax=NUM
للبحث عن أرشيفات تحتوي على ملفات مضغوطة وأرشيفات تصل إلى مستويات NUM
. قد تتراوح قيمة NUM
من 1 إلى 99 لما يصل إلى 99 خطوات إلغاء الضغط وإلغاء التمييز لتوسيع ما يصل إلى 99 أرشفة متداخلة. أكبر --zmax=NUM
تدهور الأداء. من غير المرجح أن تحتاج إلى 99 من أي وقت مضى --zmax=2
يكفي بالنسبة لمعظم حالات الاستخدام العملية ، مثل البحث عن ملفات zip المخزنة في ملفات TAR.
عندما يتم استخدام الخيار -z
مع الخيارات -g
أو -O
أو -M
أو -t
، يتم البحث في المحفوظات والملفات المضغوطة وغير المضغوطة التي تتطابق مع معايير اختيار اسم الملف (Glob أو Extension أو Magic Bytes أو نوع الملف) فقط. على سبيل المثال ، يبحث ugrep -r -z -tc++
من ملفات c ++ مثل محفوظات main.cpp
و zip و tar التي تحتوي على ملفات c ++ مثل main.cpp
. كما يتم تضمين ملفات C ++ مضغوطة مثل main.cpp.gz
و main.cpp.xz
عند الحضور. وأيضًا يتم البحث في أي محفوظات CPIO و PAX و TAR و ZIP و 7Z عند الحضور عن ملفات C ++ التي تحتوي عليها ، مثل main.cpp
. استخدم الخيار --stats
لمشاهدة قائمة بأنماط GLOB المطبقة على أسماء مسارات ملف المرشح في البحث المتكرر وعند البحث عن محتويات الأرشيف.
عندما يتم استخدام الخيار -z
مع خيارات -g
أو -O
أو -M
أو -t
للبحث في CPIO و JAR و PAX و TAR و ZIP و 7Z ، يتم البحث في الملفات المؤرشفة التي تتطابق مع معايير اختيار اسم الملف فقط.
يتم اكتشاف تنسيقات GZIP و Compress و ZIP تلقائيًا ، وهو أمر مفيد عند قراءة البيانات المضغوطة GZIP من الإدخال القياسي ، على سبيل المثال إعادة توجيه الإدخال من أنبوب. تتطلب تنسيقات الضغط الأخرى لاحقة اسم الملف: .bz
، .bz2
، أو .bzip2
لـ bzip2 ، .lzma
for lzma ، .xz
for xz ، .lz4
for lz4 ، .zst
أو .zstd
for zstd ، .br
for brotli و .bz3
ل BZIP3. أيضا اختصار أرشيف القطران المضغوط .taz
، .tgz
و .tpz
لـ GZIP ، .tbz
، .tbz2
، .tb2
، و .tz2
لـ BZIP2 ، .tlz
لـ LZMA ، .txz
for XZ ، و .tzst
for ZSTD. للبحث في هذه التنسيقات باستخدام ugrep من الإدخال القياسي ، استخدم الخيار --label='stdin.bz2'
لـ bzip2 ، --label='stdin.lzma'
لـ lzma ، --label='stdin.xz'
for xz ، --label='stdin.lz4
لـ LZ4 و --label='stdin.zst
لـ ZSTD وما إلى ذلك. اسم stdin
تعسفي وقد يتم حذفه:
شكل | لاحقة اسم الملف | لقعة أرشيف لاحقة قصيرة | اللاحقة المطلوبة؟ | ugrep من stdin | مكتبة |
---|---|---|---|---|---|
Gzip | .gz | .taz ، .tgz ، .tpz | لا | تلقائي | ليبز |
ضغط | .Z | .taZ ، .tZ | لا | تلقائي | مدمج |
أَزِيز | .zip ، .zipx ، .ZIP | لا | تلقائي | ليبز | |
7zip | .7z | نعم | --label=.7z | مدمج | |
BZIP2 | .bz ، .bz2 ، .bzip2 | .tb2 ، .tbz ، .tbz2 ، .tz2 | نعم | --label=.bz2 | libbz2 |
LZMA | .lzma | .tlz | نعم | --label=.lzma | liblzma |
XZ | .xz | .txz | نعم | --label=.xz | liblzma |
LZ4 | .lz4 | نعم | --label=.lz4 | liblz4 | |
ZSTD | .zst ، .zstd | .tzst | نعم | --label=.zst | libzstd |
brotli | .br | نعم | --label=.br | libbrotlidec | |
BZIP3 | .bz3 | نعم | --label=.bz3 | libbzip3 |
تدعم تنسيقات GZIP و BZIP2 و XZ و LZ4 و ZSTD الملفات المضغوطة المتسلسلة. يتم البحث في الملفات المضغوطة المتسلسلة كملف واحد.
يتم تخزين طرق ضغط الرمز البريدي المدعومة (0) ، deflate (8) ، BZIP2 (12) ، LZMA (14) ، XZ (95) و ZSTD (93). تتطلب أساليب BZIP2 و LZMA و XZ و ZSTD تجميع UGREP مع مكتبات الضغط المقابلة.
لا يتم دعم البحث عن محفوظات الرمز البريدي المشفرة (ربما في الإصدارات المستقبلية ، اعتمادًا على طلبات التحسينات).
يستغرق البحث في أرشيفات 7ZIP الكثير من ذاكرة الوصول العشوائي والمزيد من الوقت مقارنة بالطرق الأخرى. لا يدعم تطبيق 7ZIP LZMA SDK البث ، مما يتطلب ملف 7Z فعلي. هذا يعني أنه لا يمكن البحث في ملفات 7Z عند التداخل داخل الأرشيف. الأفضل هو تجنب 7zip. يمكن ./build.sh --disable-7zip
دعم 7zip باستخدام.
يستخدم الخيار -z
مؤشرات الترابط لمهمة التوازي لتسريع البحث عن ملفات أكبر عن طريق تشغيل Declussoror بشكل متزامن مع البحث عن الدفق المضغوط.
لإدراج جميع الملفات غير الفارغة المخزنة في package.zip
.
ug --zmax=2 -z -l '' package.zip
نفس الشيء ، ولكن فقط سرد ملفات رمز المصدر Python ، بما في ذلك البرامج النصية التي تستدعي Python ، مع الخيار -tPython
( ugrep -tlist
للحصول على التفاصيل):
ug --zmax=2 -z -l -tPython '' package.zip
للبحث في تطبيقات Python الموزعة كملف TAR مع تبعياتها ، يتضمن عجلات (ملفات ZIP مع رمز Python) ، والبحث عن كلمة my_class
في app.tgz
:
ug --zmax=2 -z -tPython -w my_class app.tgz
للبحث بشكل متكرر ملفات C ++ بما في ذلك الملفات المضغوطة لكلمة my_function
، أثناء تخطي تعليقات C و C ++:
ug -z -r -tc++ -Fw my_function -f cpp/zap_comments
للبحث عن بيانات مضغوطة BZIP2 و LZMA و XZ و LZ4 و ZSTD على الإدخال القياسي ، يمكن استخدام الخيار --label
لتحديد الامتداد المقابل لتنسيق الضغط لفرض الضغط عندما لا يكون امتداد BZIP2 متاحًا لـ UGREP ، على سبيل المثال:
cat myfile.bz2 | ugrep -z --label='stdin.bz2' 'xyz'
للبحث عن ملف main.cpp
في project.zip
لخطوط TODO
و FIXME
:
ug -z -g main.cpp -w -e 'TODO' -e 'FIXME' project.zip
project.tar.gz
TODO
FIXME
ug -z -tc++ -w -e 'TODO' -e 'FIXME' project.tar.gz
للبحث عن ملفات مطابقة Glob *.txt
في project.zip
للحصول على license
الكلمة في أي حال (لاحظ أنه يجب نقل وسيطة -g
Glob):
ug -z -g '*.txt' -w -i 'license' project.zip
لعرض وصفحة من خلال جميع ملفات C ++ في Tarball project.tgz
:
ug --pager -z -tc++ '' project.tgz
لسرد الملفات التي تتطابق مع glob /**/projects/project1.*
December 12
projects.tgz
ug -z -l -g '/**/projects/project1.*' -F 'December 12' projects.tgz
لعرض بيانات meta -inf/manesest.mf في ملف JAR مع -Ojar
و -OMF
لتحديد ملف JAR وملف MF فيه ( -Ojar
مطلوب ، وإلا سيتم تخطي ملف الجرة على الرغم من أنه يمكننا قراءته من المدخلات القياسية بدلاً من ذلك):
ug -z -h -OMF,jar '' my.jar
لاستخراج ملفات C ++ التي تحتوي على FIXME
من project.tgz
، نستخدم -m1
مع --format="'%z '"
لإنشاء قائمة مفصولة بالفضاء من أسماء الملفات الموجودة في الأرشيف التي تتطابق مع Word FIXME
:
tar xzf project.tgz `ugrep -z -l -tc++ --format='%z ' -w FIXME project.tgz`
لإجراء عملية بحث للعمق الأول مع find
، ثم استخدم cpio
و ugrep
للبحث في الملفات:
find . -depth -print | cpio -o | ugrep -z 'xyz'
؟ العودة إلى جدول المحتويات
--ignore-files[=FILE]
Ignore files and directories matching the globs in each FILE that
is encountered in recursive searches. The default FILE is
`.gitignore'. Matching files and directories located in the
directory of the FILE and in subdirectories below are ignored.
Globbing syntax is the same as the --exclude-from=FILE gitignore
syntax, but files and directories are excluded instead of only
files. Directories are specifically excluded when the glob ends in
a `/'. Files and directories explicitly specified as command line
arguments are never ignored. This option may be repeated to
specify additional files.
-M MAGIC, --file-magic=MAGIC
Only files matching the signature pattern MAGIC are searched. The
signature "magic bytes" at the start of a file are compared to
the MAGIC regex pattern. When matching, the file will be searched.
When MAGIC is preceded by a `!' or a `^', skip files with matching
MAGIC signatures. This option may be repeated and may be combined
with options -O and -t to expand the search. Every file on the
search path is read, making searches potentially more expensive.
-O EXTENSIONS, --file-extension=EXTENSIONS
Search only files whose filename extensions match the specified
comma-separated list of EXTENSIONS, same as --include='*.ext' for
each `ext' in EXTENSIONS. When `ext' is preceded by a `!' or a
`^', skip files whose filename extensions matches `ext', same as
--exclude='*.ext'. This option may be repeated and may be combined
with options -g, -M and -t to expand the recursive search.
-t TYPES, --file-type=TYPES
Search only files associated with TYPES, a comma-separated list of
file types. Each file type corresponds to a set of filename
extensions passed to option -O and filenames passed to option -g.
For capitalized file types, the search is expanded to include files
with matching file signature magic bytes, as if passed to option
-M. When a type is preceded by a `!' or a `^', excludes files of
the specified type. This option may be repeated.
-g GLOBS, --glob=GLOBS
Search only files whose name matches the specified comma-separated
list of GLOBS, same as --include='glob' for each `glob' in GLOBS.
When a `glob' is preceded by a `!' or a `^', skip files whose name
matches `glob', same as --exclude='glob'. When `glob' contains a
`/', full pathnames are matched. Otherwise basenames are matched.
When `glob' ends with a `/', directories are matched, same as
--include-dir='glob' and --exclude-dir='glob'. A leading `/'
matches the working directory. This option may be repeated and may
be combined with options -M, -O and -t to expand searches. See
`ugrep --help globs' and `man ugrep' section GLOBBING for details.
--stats
Output statistics on the number of files and directories searched,
and the inclusion and exclusion constraints applied.
لسرد جميع الملفات التي تبدأ بـ #!
Shebangs:
ug -l -M'#!' ''
لسرد جميع الملفات التي تبدأ بـ #
ولكن ليس مع #!
Shebangs:
ug -l -M'#' -M'^#!' ''
لسرد جميع ملفات Python بشكل متكرر (ملحق .py
أو shebang) مع -tPython
:
ug -l -tPython ''
لسرد جميع الملفات غير المتكررة مع -t^Shell
:
ug -l -t^Shell ''
To recursively list Python files (extension .py
or a shebang) that have import statements, including hidden files with -.
:
ug -l. -tPython -f python/imports
؟ Back to table of contents
-Z[best][+-~][MAX], --fuzzy=[best][+-~][MAX]
Fuzzy mode: report approximate pattern matches within MAX errors.
The default is -Z1: one deletion, insertion or substitution is
allowed. If `+`, `-' and/or `~' is specified, then `+' allows
insertions, `-' allows deletions and `~' allows substitutions. For
example, -Z+~3 allows up to three insertions or substitutions, but
no deletions. If `best' is specified, then only the best matching
lines are output with the lowest cost per file. Option -Zbest
requires two passes over a file and cannot be used with standard
input or Boolean queries. Option --sort=best orders matching files
by best match. The first character of an approximate match always
matches a character at the beginning of the pattern. To fuzzy
match the first character, replace it with a `.' or `.?'. Option
-U applies fuzzy matching to ASCII and bytes instead of Unicode
text. No whitespace may be given between -Z and its argument.
The beginning of a pattern always matches the first character of an approximate match as a practical strategy to prevent many false "randomized" matches for short patterns. This also greatly improves search speed. Make the first character optional to optionally match it, eg p?attern
or use a dot as the start of the pattern to match any wide character (but this is slow).
Line feed ( n
) and NUL (