فتح قوة هذه البدائل لـ grep في نظام التشغيل ويندوز

متعب من استخدام نفس الأدوات التي تستخدمها على جهازك، مثل grep؟ لماذا تتفق؟ يمكن أن تساعد العديد من بدائل grep في Windows في البحث بدقة عن ما تبحث عنه.

في هذا البرنامج التعليمي، ستتعلم كيف تجعل هذه البدائل لـ grep من الممكن البحث في الملفات بشكل أسرع والعثور على المعلومات التي تحتاج إليها في لحظة.

تابع وكن صديقًا لأدوات البحث القوية!

المتطلبات المسبقة

يتضمن هذا البرنامج التعليمي عروضًا تفاعلية. لمتابعة الدروس، تأكد من توفر ما يلي:

  • A Window machine – This tutorial uses Windows 10 PC, but any version of Windows will suffice.
  • PowerShell – يستخدم هذا البرنامج التعليمي PowerShell 7.2.8.
  • scoop – يستخدم هذا البرنامج التعليمي scoop v0.3.1.

البحث عن سلاسل نصية محددة (findstr) داخل الملفات

القدرة على اكتشاف السلاسل النصية المحددة (بأنماط معينة) التي تبحث عنها في ملف يساعد كثيرًا في سير العمل الخاص بك. لكن كيف؟ استخدم أمر الأوامر findstr في Windows، الذي يتيح لك البحث عن سلاسل نصية محددة داخل الملفات.

findstr يُستخدم غالبًا كما يُستخدم grep في نظام Windows، حيث يتمتع بوظائف مماثلة لأمر grep في نظام Unix. ما هي فوائد استخدام findstr؟ أحد الأمثلة هو أنه مدمج في أي نظام تشغيل Windows (OS) – لا يلزم تثبيت برامج إضافية.

للبحث عن سلاسل نصية معينة في ملف، اتبع هذه الخطوات:

أنشئ ملف نصي باستخدام محرر النصوص المفضل لديك، سمِّيه notes.txt، واملأ المحتوى أدناه إلى الملف.

Hello, world. This is an example of a text file.
I am writing some notes in this file.
Here are some keywords to search for: apple banana cherry.

الآن، افتح PowerShell كـ مسؤول وقم بتشغيل الأمر أدناه للبحث عن سلاسل نصية (findstr) وفقًا لنمط البحث (”apple") في ملف notes.txt.

? يحتوي findstr على العديد من المعلمات التي يمكن استخدامها لتخصيص البحث. ولكن في هذا البرنامج التعليمي، ستستكشف بعضًا من أهم المعلمات عند البحث عن سلاسل في الملفات.

findstr "apple" "C:\\myfiles\\notes.txt
Searching text strings with the word apple in it

? ربما تكون تبحث عن سلاسل في ملفات متعددة. إذا كان الأمر كذلك، قم بتحديد مسارات الملفات مفصولة بمسافات، مثلما في الأمثلة التالية: findstr parameters "pattern" "C:\\path\\to\\file1.txt" "C:\\path\\to\\file2.txt"

البحث عن سلاسل تطابق نمطًا معينًا أو نصًا حرفيًا.

عند العمل مع ملفات التكوين، يعد العثور على سلاسل نصية في نمط محدد أو حرفية أمرًا حاسمًا، خاصةً أثناء عملية تصحيح الأخطاء. لحسن الحظ، يخبر المعلمة /c الأمر findstr بالبحث عن سلاسل حرفية تتطابق مع نمط محدد، بما في ذلك أي مسافات أو أحرف خاصة.

إضافة المعلمة /c إلى الأمر findstr يأتي بفائدة في مواقف مثل:

  • البحث عن عبارة محددة أو مجموعة من الكلمات التي تظهر بترتيب معين.
  • البحث عن سلسلة نصية تحتوي على مسافات أو أحرف خاصة.

لرؤية كيفية عمل المعلمة /c عمليًا، اتبع هذه الخطوات:

1. قم بتشغيل الأمر findstr أدناه للبحث عن السلسلة الحرفية (/c) banana cherry في ملف *notes.txt*.

findstr /c:"banana cherry" "C:\myfiles\notes.txt"

في الناتج أدناه، يقوم الأمر findstr بإرجاع الأسطر التي تحتوي فقط على السلسلة الدقيقة banana cherry مع وجود مسافة بين الكلمتين.

تذكر أن المعلمة /c حساسة لحالة الأحرف، لذا يقوم الأمر findstr بإرجاع السلسلة بالحالة الحرفية التي حددتها بالضبط. إذا لم تتطابق أي من السلاسل في ملف notes.txt مع النمط المحدد، يعيد الأمر findstr إخراجًا فارغًا.

Searching for a literal string

2. بعد ذلك، أضف السطر التالي إلى ملف notes.txt، واحفظ التغييرات.

في هذه النقطة، يجب أن تكون هناك سطرين في ملف notes.txt يحتويان على سلسلة “hello”. واحد بالأحرف الصغيرة بالكامل (hello, world.)، وآخر بحرف ‘H’ كبير (Hello, world.).

hello, world.

3. الآن، قم بتشغيل كل أمر أدناه للبحث عن سلسلة النص hello, world أو Hello, world في ملف notes.txt.

# نمط بالأحرف الصغيرة بالكامل
findstr /c:"hello, world" "C:\myfiles\notes.txt"
# بوجود حرف كبير 'H'
findstr /c:"Hello, world" "C:\myfiles\notes.txt"

لاحظ أدناه أنه بغض النظر عن وجود سطرين يحتويان على سلسلة ‘hello, world’ في ملف notes.txt، ستحصل فقط على سطر واحد من السلسلة.

يخبر المعلم الأمر /c الأمر findstr بطباعة السطور التي تحتوي على سلسلة ‘hello, world’ بحروف صغيرة أو بحرف ‘H’ كبير.

Searching for the ‘hello, world’ literal string with the lowercase ‘h’

4. أخيرًا، قم بتشغيل الأمر findstr أدناه للبحث عن سلاسل تحتوي على النمط hello في ملف notes.txt وتجاهل (/i) حالة الحروف.

البحث ذو الحساسية للحالة يعمل بشكل جيد إذا كنت بالفعل تعرف الحالة الفعلية للحرف الذي تبحث عنه. ولكن إذا كنت ترغب في رؤية جميع أسطر النصوص التي تطابق نمطًا بغض النظر عن حالة الحروف، فسيقوم المعلم /i بالعمل.

findstr /i "hello" "C:\myfiles\notes.txt"
Searching strings while Ignoring the letter case

العثور على سلاسل محددة داخل الملفات والمجلدات

بالإضافة إلى البحث عن سلاسل محددة في الملفات، يتيح لك أمر findstr البحث عن سلاسل مطابقة داخل الملفات والمجلدات والمجلدات الفرعية.

يفترض أن ترغب في البحث عن جميع الملفات في دليل تحتوي على كلمة معينة في محتوياتها. إذاً، دع باراميتر /s يقوم بالعمل القذر.

قم بتشغيل الأمر أدناه للبحث (/s) في الدليل الحالي والأدلة الفرعية (/s) عن جميع الملفات (*.*) التي تحتوي على سلسلة system، متجاهلًا حالة الحروف (-i)

تذكر أن هذا الأمر يبحث فقط عن الملفات التي تحتوي على سلسلة system ككلمة كاملة وليس تلك التي هي جزء من كلمات أكبر، مثل systematic أو systemize.

findstr /s /i system *.*

الإخراج أدناه يظهر قائمة بأسماء الملفات، واحدة في كل سطر، باسم كل ملف يحتوي على سلسلة ‘system’.

Finding specified strings within files, directories, and subdirectories

البحث عن السلاسل باستخدام cmdlet Select-String

حتى الآن، رأيت أن أمر findstr يعمل بشكل ممتاز في البحث عن السلاسل، ولكن cmdlet Select-String لا يجب تركه جانباً. هذا الأمر هو ما يعادل grep في نظام التشغيل Windows ويتيح لك البحث عن أنماط نصية محددة في الملفات والسلاسل.

تم تصميم cmdlet Select-String لتحقيق الكفاءة، ويتيح لك البحث بسرعة في كميات كبيرة من النصوص ويدعم تعابير العددية (regexes). وبدوره، يتيح لك هذا الأمر البحث عن أنماط أكثر تعقيداً حتى من findstr.

لرؤية كيفية عمل الأمر البرمجي Select-String، اتبع هذه الخطوات:

1. افتح ملف notes.txt أولاً، أضف الأسطر التالية، ثم احفظ التغييرات.

إضافة هذه الأسطر هي استعداد لتوضيح كيف يتعامل الأمر البرمجي Select-String مع حالات الحروف في الخطوات التالية.

Apple
APPLE
ApplE

2. بعد ذلك، قم بتشغيل الأمر التالي للبحث عن سلسلة النص apple في ملف notes.txt.

Select-String -Pattern "apple" -Path "C:\myfiles\notes.txt"

أدناه، تحتوي عدة أسطر على سلسلة ‘apple’ ولكن بأحالات حروف مختلفة نظرًا لأن الأمر البرمجي Select-String لا يميز بين الحالات الكبيرة والصغيرة. ولكن الشيء الجيد هو أنه يمكنك بسهولة رؤية والتحقق من السلاسل المطابقة نظرًا لتمييزها.

Searching for a string in a text file

? ربما تفضل استخدام مطابقة سلسلة بسيطة بدلاً من مطابقة regex. إذا كان الأمر كذلك، فقم بإضافة المعامل -SimpleMatch كما هو موضح أدناه، ولا تقلق أبدًا بشأن صيغة regex والحروف الخاصة. Select-String 'APPLE' "C:\\myfiles\\notes.txt" -SimpleMatch

3. الآن، قم بتشغيل الأمر أدناه للبحث عن APPLE في ملف notes.txt مع تمكين حساسية الحالة (-CaseSensitive). المعامل -CaseSensitive يأتي بمنتهى الفائدة لدقة البحث.

Select-String -Pattern 'APPLE' -Path "C:\myfiles\notes.txt" -CaseSensitive

كما يمكنك رؤية أدناه، السلسلة الوحيدة المطابقة تحمل الحالة الدقيقة التي حددتها (APPLE).

Searching for a string with case sensitivity enabled

4. أخيرًا، قم بتشغيل الأمر أدناه باستخدام regex للبحث عن النمط '\?' (علامة استفهام) في جميع ملفات النص (*.txt) في الدليل $PSHOME\en-US. يسمح لك regex بالبحث عن أنماط أكثر تعقيدًا.

Select-String -Path "$PSHOME\en-US\*.txt" -Pattern '\?’

إذا كان محتوى الملف يحتوي على علامة استفهام، فإن الأمر يعيد المسار الكامل للملف إلى وحدة التحكم، كما هو موضح أدناه.

Searching for a string (a question mark) in files using regex

استخدام ريبغريب (rg) كبديل لأمر grep في نظام التشغيل ويندوز

rg هو أداة سطر أوامر مفتوحة المصدر مصممة للبحث في الملفات باستخدام أنماط regex بشكل سريع. على غرار الأدوات الأخرى في سطر الأوامر، يحتوي rg على العديد من الخيارات والميزات لتخصيص عمليات البحث الخاصة بك.

ولكن على عكس أمر findstr و cmdlet Select-String، لا يتم تثبيت rg في نظام تشغيل ويندوز الخاص بك بشكل افتراضي.

لاستخدام rg كبديل لأمر grep في نظام التشغيل ويندوز:

1. قم بتشغيل الأمر scoop أدناه لتثبيت ripgrep على نظامك. scoop install ripgrep

scoop install ripgrep
Installing ripgrep on your system

2. بعد ذلك، قم بتشغيل الأمر rg التالي للتحقق من الإصدار المثبت لـ rg.

rg --version

كما هو موضح أدناه، سترى رقم الإصدار المثبت لـ rg. في هذه النقطة، يمكنك الآن تشغيل أوامر rg للبحث عن سلاسل.

Verifying rg is installed

3. قم بتشغيل الأمر rg أدناه للبحث عن سلسلة apple في ملف notes.txt.

rg apple C:\myfiles\notes.txt

يعرض الناتج أي سطور في ملف notes.txt تحتوي على سلسلة apple، كما هو موضح أدناه.

لاحظ أن الناتج مشابه لناتج cmdlet Select-String. ولكن بدلاً من التمييز، يقوم rg بتغيير لون السلسلة المطابقة ورقم السطر لتمييزهما بسرعة.

Searching for the string ‘apple’ in a text file

4. الآن، قم بتشغيل الأمر التالي باستخدام regex للبحث عن سلاسل في ملف notes.txt.

التعبير النمطي أدناه يستخدم حدود الكلمة (\b) ويخبر rg بالبحث عن سطور النصوص التي تحتوي على كلمة تبدأ بـ ‘s’ وتنتهي بـ ‘e’ (s\w+e).

rg "\bs\w+e\b" "C:\myfiles\notes.txt"
Search for strings using regex

تصفية البحث حسب نوع الملف المحدد

ربما تكون خاصًا بالدليل الذي يوجد به الملف الذي تبحث عنه ولكن ليس اسم الملف. في مثل هذه الحالات، قد يكون تصفية البحث بواسطة نوع الملف هو أفضل خيار لك.

يمكن أن تكون تصفية البحث لأنواع الملفات المحددة مفيدة عندما تكون مهتمًا فقط بالبحث في أنواع معينة من الملفات. أو عندما ترغب في استبعاد بعض أنواع الملفات من البحث.

لتصفية البحث لأنواع ملفات معينة، سيقوم الخيار --type بالعمل كما يلي:

1. قم بتشغيل الأمر rg التالي للبحث عن السلسلة apple في جميع ملفات النص (--type txt) في الدليل C:\\myfiles.

يأخذ الخيار --type نوع ملف كوسيطة، مما يخبر أمر rg بالبحث فقط في الملفات التي تطابق نوع الملف المحدد.

rg "apple" "C:\myfiles" --type txt

يظهر الإخراج أدناه السطر الذي يحتوي على السلسلة ‘apple‘ واسم الملف المرتبط به (notes.txt).

Filtering the search to specific file types

2. بعد ذلك، أنشئ ملف XML يسمى notes.xml واملأ الشفرة أدناه. هذا الملف XML مجرد استعداد لتوضيح كيفية عمل البحث بالرموز المعبرة.

<?xml version="1.0" encoding="UTF-8"?>
<fruitBasket>
  <fruit id="1">
    <fruitName>Apple</fruitName>
  </fruit>     
</fruitBasket>

٣. الآن، قم بتشغيل الأمر أدناه للبحث عن السلسلة apple في جميع (*.) . يقوم هذا الأمر بالبحث فقط في الملفات txt و xml كما هو محدد (-g).

rg "apple" "C:\myfiles" -g '*.{txt,xml}

بشكل افتراضي، يحتوي rg على حساسية لحالة الأحرف. ونتيجة لذلك، يظهر الإخراج فقط السطر الذي يحتوي على السلسلة الدقيقة ‘apple’، والملف المرتبط به.

Filtering searches by a broader range of file types

٤. في النهاية، قم بتشغيل الأمر التالي، كما فعلت في الخطوة الثالثة، للبحث عن السلسلة apple في جميع الملفات (*.) التي تحتوي على امتداد txt أو xml. ولكن هذه المرة، أضف الخيار -i، الذي يخبر rg بتجاهل حالات الأحرف.

rg "apple" "C:\myfiles" -g '*.{txt,xml}-i
Filtering searches by a broader range of file types ignoring letter cases

الاستنتاج

طوال هذا البرنامج التعليمي، تعلمت العديد من مكافئات grep في نظام Windows للبحث عن سلاسل كنصية وباستخدام regexes. لقد فتحت قوة هذه المكافئات مع مجموعة من الخيارات والمعلمات لتخصيص البحث وتصفية أنواع الملفات المحددة.

في هذه النقطة، يجب أن تكون واثقًا في تصحيح المشاكل وتحديد المشكلات والبحث من خلال مجموعات كبيرة من ملفات النصوص.

الآن، لماذا لا تضع مهاراتك الجديدة في التطبيق من خلال ممارسة regexes وتخصيص بحثك؟

Source:
https://adamtheautomator.com/grep-equivalents-in-windows/