در این آموزش قصد داریم با دستور grep آشنا شویم . Grep مخفف Global regular expression print است . همانطور که از نام آن پیداست، Grep برای جستجوی در فایل های متنی از عبارات منظم (به طور خلاصه regex ) استفاده می کند و خطوط مطابق با الگوی داده شده را در یک فایل متنی چاپ می کند. اگر هیچ فایلی داده نشود، grep الگوی داده شده را به صورت بازگشتی در فایل های دایرکتوری فعلی جستجو می کند. Grep دو نوع دارد، یعنی egrep و fgrep. این گونه ها منسوخ شده اند اما برای سازگاری با گذشته ارائه شده اند. به جای استفاده از “grep -E” و “grep -F”، می توانید به ترتیب از “egrp” و “fgrep” استفاده کنید. بدون هیچ مقدمه ای، اجازه دهید شروع کنیم.
نمونه های دستور Grep
من یک فایل به نام file.txt با چند کلمه تصادفی دارم . اجازه دهید نگاهی به file.txt بیندازیم:
$ cat file.txt
linuxme.ir
Linuxme.ir
Bili$px
linux
linus
unix
technology
hello world
HELLO world
برای شروع جستجو، فقط grep را تایپ کنید و سپس آنچه را که به دنبال آن و در کجا به دنبال آن هستید را تایپ کنید. به عنوان مثال، من قصد دارم به دنبال رشته “nix” در file.txt بگردم. برای انجام این کار، اجرا می کنم:
$ grep nix file.txt
خروجی نمونه:
unix
همانطور که در خروجی بالا مشاهده می کنید، یک کلمه دریافت کردیم که حاوی الگوی تطبیق “nix” است. اگر رشته جستجو دارای دو کلمه است، آنها را در داخل نقل قول های تکی مانند زیر ذکر کنید.
$ grep 'hello world' file.txt
hello world
همچنین می توانید از پرچم n برای نشان دادن شماره خطوط در خروجی استفاده کنید:
$ grep -n nix file.txt
خروجی نمونه:
6:unix
این می تواند زمانی مفید باشد که با یک کد بسیار طولانی کار می کنید.
لطفاً توجه داشته باشید که grep به حروف کوچک و بزرگ حساس است . به عنوان مثال، هنگامی که “li” را جستجو می کنید ، خطوط حاوی حروف بزرگ یعنی Li نمایش داده نمی شود.
مثال زیر را بررسی کنید.
$ grep li file.txt
linuxme.ir
Bili$px
linux
linus
اما، من کلمه دیگری به نام “Linuxme.ir” در file.txt دارم، اما grep آن را فهرست نکرده است.
با این حال، اگر میخواهید حساس به حروف کوچک و بزرگ را نادیده بگیرید، میتوانید از پرچم i مانند زیر استفاده کنید.
$ grep -i li file.txt
linuxme.ir
Linuxme.ir
Bili$px
linux
linus
$ grep -i 'hello world' file.txt
hello world
HELLO world
حالا grep اهمیتی به حروف بزرگ نمیدهد و در نتیجه کلماتی را به دست آوردیم که هم حروف بزرگ و هم حروف کوچک دارند.
ما همچنین می توانیم خروجی یک دستور را به grep پایپ کنیم. به مثال زیر دقت کنید.
$ cat file.txt | grep li
linuxme.ir
Bili$px
linux
linus
حالا ببین چی داریم خروجی file.txt به grep منتقل می شود و کلمات حاوی حروف “li” در file.txt نمایش داده می شوند.
همچنین می توانیم از برخی کاراکترهای خاص یا عبارات منظم در grep استفاده کنیم.
- ^ – در ابتدای خط جستجو کنید.
- $ – در انتهای خط جستجو کنید.
- . – هر جای خط را جستجو کنید.
بگذارید یک مثال به شما نشان دهم تا بتوانید بفهمید که کجا و چگونه از آن کاراکترهای خاص استفاده کنید.
قبلاً میدانید، ما میتوانیم کلماتی را که شامل رشته «li» هستند ، مانند زیر جستجو کنیم.
$ grep lin file.txt
linuxme.ir
Bili$px
linux
linus
اما اگر بخواهید فقط خطوطی را جستجو کنید که فقط با کلمه “li” شروع می شوند چه می شود. شما نمی خواهید همه کلماتی حاوی این رشته هستند را نمایش دهید، بلکه فقط کلماتی را که دارای رشته “li” در ابتدا هستند نمایش دهید. اینجاست که کاراکترهای خاص به کار می آیند.
برای جستجوی کلماتی که با الگوی “li” در ابتدای خط در یک فایل مطابقت دارند، اجرا کنید:
$ grep ^li file.txt
linuxme.ir
linux
linus
به طور مشابه، میتوانیم کلماتی را که با یک حرف خاص ختم میشوند، به عنوان مثال “x” ، مانند زیر جستجو کنیم.
$ grep x$ file.txt
linux
unix
همچنین، می توانید کلماتی را که حاوی هر کاراکتری هستند با استفاده از . (نقطه).
به عنوان مثال، اجازه دهید هر کلمه ای را که دارای “n” در فایل است جستجو کنیم .
$ grep .n file.txt
linuxme.ir
Linuxme.ir
linux
linus
unix
technology
اکنون باید درک اولیه ای از استفاده از grep داشته باشید. اجازه دهید پیش برویم و دو نوع دیگر، یعنی egrep و fgrep را یاد بگیریم .
نمونه های دستور Egrep
egrep مخفف extended grep است . این شبیه به دستور “grep -E” است . تمام کارهایی که grep انجام می دهد را انجام خواهد داد. با این حال، برخی از عملکردهای اضافی، مانند استفاده از regex پیچیده، نسبت به دستور معمولی grep را ارائه می دهد.
به عنوان مثال، ما می توانیم هر کلمه ای را که با “h” یا “u” شروع می شود جستجو کنیم .
به یاد داشته باشید که برای جستجوی کلمات در ابتدای خط از نماد caret (^) استفاده می کنیم. بنابراین، دستور ما برای جستجوی فوق به صورت زیر خواهد بود:
$ egrep '^(h|u)' file.txt
unix
hello world
ما همه کلماتی را داریم که با “h” یا “u” شروع می شوند. لطفا توجه داشته باشید که دستور grep معمولی نمی تواند این کار را انجام دهد.
به طور مشابه، ما می توانیم خطوطی را جستجو کنیم که با هر محدوده کاراکتری بین “l” تا “u” شروع می شوند. یعنی خطوطی را که با l، m، n، o، p، q، r، s، t و u شروع میشوند، دریافت میکنیم. هر چیز دیگری از نتیجه حذف خواهد شد.
$ egrep '^[lu]' file.txt
linuxme.ir
linux
linus
unix
technology
لطفاً توجه داشته باشید که من از کروشه مربع ([) برای جستجوی دامنه کلمات استفاده کرده ام . از آنجایی که grep به حروف بزرگ و کوچک حساس است، نمیتوان خطوطی را پیدا کرد که با حروف بزرگ شروع میشوند.
برای نمایش تمام خطوطی که با حروف بزرگ و کوچک شروع می شوند، از:
$ egrep '^[lu]|[LU]' file.txt
یا
$ egrep '^([lu]|[LU])' file.txt
خروجی نمونه:
linuxme.ir
Linuxme.ir
linux
linus
unix
technology
اکنون کلماتی را داریم که با دامنه کاراکتر “l” تا “u” شروع می شوند (حروف بزرگ یا کوچک).
مثال های دستور Fgrep
fgrep مخفف fast grep است . این شبیه به “grep -F” است . fgrep نمی تواند عبارات منظم یا کاراکترهای خاص را تشخیص دهد. از fgrep می توان در جایی که می خواهید عبارات منظم ارزیابی شوند استفاده کرد.
برای مثال، از دستور زیر برای یافتن کلماتی که به “x” ختم میشوند استفاده میکنیم .
$ grep x$ file.txt
linux
unix
حالا همین دستور را با fgrep اجرا کنید.
$ fgrep x$ file.txt
چیزی نمایش نمی دهد، زیرا نمی تواند کاراکترهای خاص را ارزیابی کند.
حالا بیایید نمونه دیگری را ببینیم. برای جستجوی کلماتی که با رشته “i$” مطابقت دارند با دستور grep، این کار را انجام می دهیم:
$ grep i$ file.txt
اما، ما چیزی دریافت نمی کنیم، چرا؟ زیرا طبق دستور بالا از نماد دلار($) برای یافتن کلماتی که به “i” ختم می شوند استفاده می کنیم. از آنجایی که هیچ کلمه ی با “i” در file.txt وجود نداشت، چیزی دریافت نمی کنیم.
حالا همین دستور را با fgrep اجرا کنید.
$ fgrep i$ file.txt
Bili$px
اینجاست که از دستور fgrep استفاده می کنیم. به سادگی نماد دلار (البته کاراکتر ویژه) را نادیده می گیرد و کلمه ای را که حاوی رشته “$i” است نمایش می دهد.
برای جزئیات بیشتر در مورد grep، تایپ کنید:
$ grep -- help
تمام گزینه های ممکن را ارائه می دهد. یا به صفحات man مراجعه کنید.
Grep یکی از دستورات مهمی است که باید آن را به طور کامل یاد بگیرید.
اکنون می دانید grep چیست و چگونه از آن برای جستجوی فایل های متنی با الگوهای منطبق در گنو/لینوکس استفاده کنید. امیدوارم این مفید بوده باشد.
افزودن نظر