قدرت سیستم عامل لینوکس در خط فرمان آن یا shell می باشد که شما میتوانید کارهای مختلفی که نیاز به انجام آن دارید را با استفاده از دستورات لینوکسی انجام دهید. یکی از پرکاربردترین دستورات لینوکس که شما باید آن را بدانید و نحوه استفاده از آن را بلد باشید دستور grep در لینوکس میباشد. دستور grep ابزار جستجو یک ادمین سیستم درون فایل ها یا استریم ها است و شما با استفاده از این دستور این امکان را دارید که درون فایل ها یا استریم ها با هر الگو و شکلی که میخواهید جستجو کنید.
عبارت grep مخفف Global regular expression print میباشد و دارای پارامترهای کاربردی فراوانی میباشد که ما در این مقاله بعضی از آنها را بررسی مینماییم. فرمت کلی دستور بصورت زیر است که options اختیاری بوده و شما میتوانیید از پارامترهایی که در این مقاله برای دستور grep در لینوکس ارائه شده استفاده نمایید پس از آن Pattern میباشد که الگویی که میخواهید آن را جستجو کنید باید وارد نمایید که الزامی است و در آخر هم File آدرس فایلی که میخواهید درون آن جستجو نمایید را وارد مینمایید. شما میتوانید آدرس چندین فایل را وارد نمایید یا اصلا آدرسی وارد نکنید که در اینصورت دستور grep شاخه ای که درون آن قرار دارید را مورد جستجو قرار میدهد و سپس کل خطی که آن عبارت درون آن وجود دارد را به شما نمایش میدهد.
grep [options] Pattern [File...]
جستجو ساده در فایل با دستور grep در لینوکس
برای اینکه بخواهید یک عبارتی را درون یک فایل جستجو کنید شما میتوانید از دستور grep در لینوکس استفاده نمایید. برای مثال فرض نمایید که یک لاگ فایل درون سیستم خود دارید که نیاز دارید یک عبارت خاص مانند localhost را درون آن جستجو نمایید کافیست دستور grep را به همراه عبارت مد نظر و نام فایل همانند زیر وارد نمایید تا جستجو انجام پذیرد.
grep localhost logfile.txt
دقت نمایید که دستور grep بصورت case-sensitive میباشد و به حروف کوچک و بزرگ حساس است همچنین درصورتی که میخواهید عبارتی را جستجو نمایید که درون آن فاصله وجود دارد حتما از Double quotation استفاده شود همانند دستور زیر:
grep "ip address" logfile.txt
پارامتر i- در دستور grep در لینوکس
همانطور که گفته شد دستور grep بصورت case-sensitive عمل میکند و شما برای اینکه این حالت را غیر فعال کنید باید از پارامتر i- در دستور خود همانند زیر استفاده کنید.
grep -i localhost logfile.txt
جستجو در چندین فایل در لینوکس با دستور grep
شما میتوانید با یک دستور در چندین فایل عبارت مد نظرتان را جستجو نمایید. کافیست در قسمتی که آدرس فایل را وارد مینمایید آدرس فایل های مورد نظرتان را با فاصله همانند زیر مشخص نمایید.
grep localhost /etc/log1 /var/log2.txt /home/test/log3.lg
مشخص کردن شماره خط در دستور grep در لینوکس
گاها زمانیکه شما در حال جستجو درون یک فایل با تعداد خطوط زیاد هستید نیاز است که علاوه بر عبارت جستجو شده شماره خطی که آن عبارت در آن خط وجود دارد را نیز ببینید برای اینکه بتوانید این کار را انجام بدهید از پارامتر n- استفاده نمایید. برای مثال شما میخواهید درون یک فایل کانفیگ به جستجو یک عبارت به خصوص بگردید و نیاز دارید که شماره خطی که آن عبارت درون آن وجود دارد نیز به همراه نتیجه جستجو به شما نمایش داده شود.برای این منظور میتوانید همانند زیر از پارامتر n- استفاده نمایید.
grep -n keyword file
پارامتر w- در دستور grep در لینوکس
دستور grep بصورت پیش فرض زمانیکه به دنبال یک عبارت درون فایلی در حال جستجو است هر خطی که شامل آن عبارت باشد بدون در نظر گرفتن کاراکترهایی که ممکن است به آن چسبیده باشد را به عنوان پاسخ باز میگرداند. به عبارت دیگر هر چیزی که شامل آن عبارت شود به همراه کاراکترها قبل و بعد آن را به عنوان پاسخ در نظر میگیرد و به کاربر نشان میدهد. با استفاده از پارامتر w- شما میتوانید جستجو خود را منحصر نمایید که فقط عبارت داده شده جستجو شود و هیچ کاراکتر دیگری قبل یا بعد از آن وجود نداشته باشد. در تصویر زیر نحوه کارکرد این پارامتر را میبینید.
همانطور که مشاهده میکنید فایل ما شامل عبارت test میباشد و در حالت کلی عبارتی که قبل و بعد از آن هم باشد به عنوان پاسخ نشان داده میشود. در صورتیکه با اضافه کردن پارامتر w- به دستور grep در لینوکس منحصرا فقط عبارت test را جستجو کرده و فقط آن را به عنوان جواب در نظر میگیرد.
شمارش خطوط جستجو شده در دستور grep در لینوکس
زمانیکه شما از دستور grep استفاده میکنید هر خطی که آن عبارت درون آن باشد را به عنوان پاسخ به شما نمایش میدهد. اگر بخواهید تعداد این خطوط را به عنوان پاسخ به شما نمایش دهد متوانید از پارامتر n- استفاده نمایید.
جستجو در فایل در لینوکس با استفاده از regex یا عبارت با قاعده
اگر شما بخواهید درون فایل به دنبال یک الگوی خاص باشید باید از regex یا عبارات با قاعده استفاده نمایید. هدف ما از این مقاله شرح regex نیست و صرفا کاربرد آن در دستور grep مد نظرمان است اما توضیح کوتاهی در خصوص کارکرد آن در دستور grep میدهیم. ممکن است یک فایل لاگ داشته باشید که شامل کلی اطلاعات در مورد کارکرد سیستمان باشد و شما به دنبال یک الگوی خاص هستید و تمامی خطوطی که شامل آن الگوی خاص هستند را میخواهید بررسی نمایید. برای مثال خطوطی که با تاریخ شروع میشوند و سپس ip را درون خود دارند و در نهایت یک پیغام درون آنها وجود دارد. این الگو با استفاده از regex مشخص میشود و با پارامتر e- در دستور grep میتوانید از آن استفاده نمایید.
grep -e regex-pattern file
دستور grep در لینوکس به شما در جستجو درون فایل ها و استریم ها کمک میکند و میتوانید درون یک فایل متنی به هر صورتیکه بخواهید جستجو کنید
بله دستور grep بصورت پیش فرض به حروف کوچک و بزرگ انگلیسی حساس است و با استفاده از پارامتر i- میتوانید این محدودیت را لغو کنید.
تفاوتی خاصی وجود ندارد و در حقیقت دستور grep با پارامتر e- همان دستور egrep میباشد که بصورت مستقیم regular expression را قبول میکند.
واژه grep مخفف Global Regular Expression Print میباشد.