نحوه جستجو یک متن در فایل ها توسط دستور grep

نحوه جستجو یک متن در فایل ها توسط دستور grep

دستور grep در لینوکس

 

چگونه از grep برای جستجوی رشته های فایل در پوسته استفاده کنیم ؟

محتوا :

1- دستورات GREP–بررسی اجمالی

2- دستورات اصلی grep

3- چگونه از دستورات grep برای جستجوی فایل استفاده کنیم؟

4- استفاده ی باز گشتی از grep

5- استفاده از grep برای جستجوی تنها برای کلمات

6- استفاده از grep برای جستجوی دو کلمه ی متفاوت

7- شمارش خطوط با کلمات همسان

8-  تطبیق معکوس grep

9- چگونه نام فایلهای تطبیقی را لیست کنیم؟

 

دستورات GREP –بررسی اجمالی:

دستورات GREP ، که به معنی چاپ عبارت منظم جهانی است ،به عنوان یک دستور همه کاره در بین سایر دستورهای محیط ترمینال لینوکس باقی مانده است . این دستور برنامه ی بسیار قدرتمندی را ارائه میدهد که به کاربران توانایی مرتب کردن ورودی ها را بر اساس قوانین پیچیده خواهد داد . بنابراین در میان سایر دستورات لینوکسی ، این عبارت بسیار محبوتر است . دستور grep معمولا برای جستجوی متن یا جستجوی خطی از یک فایل مورد استفاده قرار میگیرد . به طور پیش فرض ، grep خطوط تطبیقی را نشان میدهد همچنین می توان از آن برای جستجوی خطی از یک متن که با یک یا چند عبارت مطابقت دارد نیز استفاده کرد . خروجی تنها خطوط تطبیقی خواهد بود .

دستورات اصلی grep :

دستورات اصلی grep به صورت زیر است :

grep ‘word’ filename

grep ‘word’ file1 file2 file3

grep ‘string1 string2’ filename

catotherfile | grep ‘something’

command | grep ‘something’

command option1 | grep ‘data’

grep –color ‘data’ fileName

چگونه از دستورات grep برای جستجو در یک فایل استفاده کنیم؟

در مثال اول ، من به دنبال کاربری به نام tom در فایل passwd خواهم گشت . برای جستجوی فایل /etc/passwd برای کاربری به نام tom ، شما نیاز دارید دستورات زیر را وارد کنید :

grep tom /etc/passwd

خروجی به صورت زیر خواهد بود :

tom:x:1000:1000:tom,,,:/home/tom:/bin/bash

شما میتوانید از گزینه هایی برای نادیده گرفتن کلمات بزرگ و کوچک استفاده کنید مثلا به او بگویید تفاوتی بین abc و یا Abc قائل شود یا خیر .

grep -i “tom” /etc/passwd

استفاده بازگشتی از grep :

اگر شما هم دسته ای از فایلهای متنی(مثلا فایل تنظیمات در /etc/apache2/ ) در دایرکتوری خود دارید ،و می خواهید فایلی را که متن مشخصی در آن تعریف شده است را بیابید ، می توانید از گزینه ی –r با دستور grep استفاده کنید تا یک جستجوی بازگشتی انجام گیرد به این معنی که می تواند تمامی فایلهای موجود در دایرکتوری را برای یک رشته بخواند :

grep -r “mydomain.com” /etc/apache2/

می توانید از دستور زیر نیز استفاده کنید:

grep -R “mydomain.com” /etc/apache2/

این هم یک نمونه ی خروجی است :

grep -r “mydomain.com” /etc/nginx/
} (/etc/nginx/sites-available/mydomain.com.vhost:       if ($http_host != “www.mydomain.com”

اینجا شما نتایج را برای mydomain.com در یک خط مجزا به همراه نام فایل می بینید . وجود نام فایل در نتایج خروجی را می توان به راحتی با استفاده از گزینه ی –h  متوقف کرد .

grep -h -R “mydomain.com” /etc/nginx/

این یک نمونه ی خروجی است :

grep -r “mydomain.com” /etc/nginx/
} (“if ($http_host != “www.mydomain.com

استفاده از grep تنها برای جستجوی کلمات:

هنگامی که شما در حال جستجوی حروف abc هستید ، grep همه چیز را با هم منطبق میکند . مثلا kbcabc, abc123, aarfbc35 و سایر ترکیبات . شما می توانید grep را وادار به انتخاب تنها خطوطی بکنید که شامل تطبیقهایی است که کل کلمه را تشکیل میدهند .

grep -w “abc” file

استفاده از grep برای جستجوی دو کلمه متفاوت:

برای جستجوی دو کلمه ی متفاوت شما باید از دستور grep به شکل زیر استفاده کنید :

egrep -w ‘word1|word2’ /path/to/file

شمارش خطوط برای کلمات تطبیقی:

دستور grep توانایی گزارش تعداد دفعاتی که یک الگوی خاص از تطبیق رخ داده است را دارد . برای اینکار از گزینه ی –c استفاده کنید :

grep -c ‘word’ /path/to/file

به علاوه ، کاربران ممکن است از گزینه ی -nقبل از هر خط خروجی با تعداد خطها در فایل متنی استفاده کنند:

grep -n ‘root’ /etc/passwd

این یک نمونه خروجی است :

1:root:x:0:0:root:/root:/bin/bash

استفاد از تطبیق معکوس:

ممکن است کاربران از گزینه ی –v برای چاپ معکوس تطبیق ها استفاده کنند . این بدان معناست که تنها آن خطوطی که شامل حرف مورد نظر نباشند نشان داده می شوند .

grep -v par /path/to/file

چگونه تنها نام فایلهای تطبیقی را لیست کنیم؟

شما باید از گزینه ی –l برای لیست کردن نام فایلهایی که شامل کلمه ی خاصی هستند استفاده کنید . به عنوان مثال برایprimary از دستور زیر استفاده کنید :

grep -l ‘primary’ *.c

در نهایت شما می توانید grep را وادار کنید تا خروجی را در یک رنگ خاص نشان دهد:

grep –color root /etc/passwd

نمونه خروجی:

دستور grep

09123781949