در grep، ما گزینه هایی معادل با OR و NOT اپراتورها داریم. هیچ grep AND اپراتور وجود ندارد.
اما شما می توانید با استفاده از الگوهای شبیه سازی کنید. مثالهای زیر ذکر شده به شما کمک می کند تا بدانید که چگونه از OR، AND و NOT در دستور لینوکس grep استفاده کنید.
فرض کنید فایلی به نام employee.txt با محتوای زیر باشد:
$ cat employee.txt
۱۰۰ Thomas Manager Sales $5,000
۲۰۰ Jason Developer Technology $5,500
۳۰۰ Raj Sysadmin Technology $7,000
۴۰۰ Nisha Manager Marketing $9,500
۵۰۰ Randy Manager Sales $6,000

Grep OR

۱- Grep OR با استفاده از |\

برای جدا کردن چند pattern در فایل باید از |\ استفاده شود.

grep ‘pattern1\|pattern2’ filename

بعنوان مثال تصمیم به جستجوی Tech یا Sales از فایل employee.txt داریم:

$ grep ‘Tech\|Sales’ employee.txt
۱۰۰ Thomas Manager Sales $5,000
۲۰۰ Jason Developer Technology $5,500
۳۰۰ Raj Sysadmin Technology $7,000
۵۰۰ Randy Manager Sales $6,000

۲- Grep OR با استفاده از E-

برای جدا کردن چندین pattern در فایل می توان از E- استفاده کرد و در بین pattern ها یا شرط از | استفاده می شود.

grep -E ‘pattern1|pattern2’ filename

بعنوان مثال تصمیم به جستجوی Tech یا Sales از فایل employee.txt داریم:

$ grep -E ‘Tech|Sales’ employee.txt
۱۰۰ Thomas Manager Sales $5,000
۲۰۰ Jason Developer Technology $5,500
۳۰۰ Raj Sysadmin Technology $7,000
۵۰۰ Randy Manager Sales $6,000

۳- Grep OR با استفاده از egrep

egrep دقیقا همانند grep -E است. بنابراین، از egrep (بدون هیچ گزینه ای) استفاده کنید.
egrep ‘pattern1|pattern2’ filename
بعنوان مثال تصمیم به جستجوی Tech یا Sales از فایل employee.txt داریم:
$ egrep ‘Tech|Sales’ employee.txt
۱۰۰ Thomas Manager Sales $5,000
۲۰۰ Jason Developer Technology $5,500
۳۰۰ Raj Sysadmin Technology $7,000
۵۰۰ Randy Manager Sales $6,000

۴- Grep OR با استفاده از grep -e

با استفاده از گزینه grep -e شما می توانید تنها یک پارامتر را منتقل کنید.

grep -e pattern1 -e pattern2 filename

بعنوان مثال تصمیم به جستجوی Tech یا Sales از فایل employee.txt داریم:

$ grep -e Tech -e Sales employee.txt
۱۰۰ Thomas Manager Sales $5,000
۲۰۰ Jason Developer Technology $5,500
۳۰۰ Raj Sysadmin Technology $7,000
۵۰۰ Randy Manager Sales $6,000

Grep AND

۵- Grep AND با استفاده از E ‘pattern1.*pattern2′-

هیچ اپراتور AND در grep وجود ندارد. اما شما می توانید با استفاده از گزینه grep -E شبیه سازی کنید.

grep -E ‘pattern1.*pattern2’ filename
grep -E ‘pattern1.*pattern2|pattern2.*pattern1’ filename

 

مثال زیر، تمام خطوطی که حاوی دو “Dev” و “Tech” در آن هستند (به همان ترتیب) grep می شوند.“Manager” and “Sales” 

$ grep -E ‘Dev.*Tech’ employee.txt
۲۰۰ Jason Developer Technology $5,500

مثال زیر، تمام خطوطی که حاوی دو “Sales” و “Manager” در آن هستند (به همان ترتیب) grep می شوند.

$ grep -E ‘Manager.*Sales|Sales.*Manager’ employee.txt

۶- Grep AND با استفاده از چندین دستور grep

شما همچنین می توانید از چندین دستور grep جدا شده توسط pipe برای شبیه سازی و سناریو استفاده کنید.

grep -E ‘pattern1’ filename | grep -E ‘pattern2’

ثال زیر، تمام خطوطی که حاوی دو “Sales” و “Manager” در آن هستند (به همان ترتیب) grep می شوند.

$ grep Manager employee.txt | grep Sales
۱۰۰ Thomas Manager Sales $5,000
۵۰۰ Randy Manager Sales $6,000

Grep NOT

۷- Grep NOT با استفاده از grep -v

با استفاده از grep -v می توانید شرایط NOT را شبیه سازی کنید. v- گزینه برای چرخش است. در واقع همه خطوط را به جز الگوی داده شده مطابقت می دهد.
grep -v ‘pattern1’ filename
برای مثال، تمام خطوط را به جز آنهایی که حاوی کلمه کلیدی “Sales” هستند را نمایش دهید.
$ grep -v Sales employee.txt
۲۰۰ Jason Developer Technology $5,500
۳۰۰ Raj Sysadmin Technology $7,000
۴۰۰ Nisha Manager Marketing $9,500
شما همچنین می توانید NOT با اپراتور دیگر ترکیب کنید تا برخی از ترکیبات قدرتمند را دریافت کنید. به عنوان مثال، در زیر Manager یاDeveloper  ( “Sales” نادیده گرفته می شود) را نمایش می دهد.
$ egrep ‘Manager|Developer’ employee.txt | grep -v Sales
۲۰۰ Jason Developer Technology $5,500
۴۰۰ Nisha Manager Marketing $9,500