27 فروردین 1399
دستور grep در لینوکس برای پیدا کردن الگو و یا کلمهای درون متن استفاده میشود. در این مقاله نحوه نصب و استفاده از این دستور را به همراه مثال ارائه میدهیم.
در مقاله “جستجوی فایلها در لینوکس” توضیحاتی در خصوص اهمیت جستجوی فایلها و همچنین نحوه جستجوی فایل در لینوکس به ویژه با دستور “Find” ارائه داده شد.
در این مقاله میخواهیم با دستور grep آشنا شویم.
دستور grep به منظور جستجو در سیستمعاملهای مبتنی بر لینوکس استفاده میشود. در واقع اگر بخواهید یک الگو یا کلمه خاصی را درون یک متن پیدا کنید، به سادگی با استفاده از این دستور، موفق به یافتن آن خواهید شد.
اگر قصد استفاده از این ابزار را دارید، ابتدا آن را روی سیستم خود نصب کنید.
برای نصب این ابزار دستور زیر را اجرا نمایید:
نصب در Debian/Ubuntu
sudo apt-get install grep
نصب در RHEL/CentOS/Fedora
sudo yum install grep
با اجرای این دستورات، ابزار grep روی سیستم شما نصب شده و از این پس میتوانید از آن استفاده نمایید.
شیوه استفاده از این دستور در لینوکس را به صورت مثالهای کاربردی بیان میکنیم.
اگر قصد دارید فایلی در سیستم خود را با نام مشخص بیابید، کافی است دستور زیر را اجرا نمایید:
dpkg -l | grep -i نام فایل
در دستور ذکر شده به جای «نام فایل» اسم فایلی که در جستجوی آن هستید را بنویسید. عبارت «i-» در دستور برای عدم حساسیت به حروف بزرگ و کوچک میباشد. اگر قصد دارید جستجوی دقیقتر انجام دهید میتوانید آن را ننویسید.
برای نمونه اگر قصد یافتن فایلی به نام python را دارید دستور زیر را اجرا کنید.
dpkg -l | grep -i python
ممکن است بخواهید محتوای فایلی را به ازای عبارتی فیلتر کرده و فقط قسمتی از آن را مشاهده نمایید. برای این منظور باید دستور زیر را اجرا کنید:
grep –v “کاراکتری که میخواهید فیلتر شود”
برای مثال قصد دارید کدهای تاثیرگذار یک فایل را مشاهده نمایید. تمام خطوطی از یک فایل را که به صورت کامند هستند و تاثیری در اجرای فایل ندارد فیلتر میکنید تا این کار به سادگی انجام شود. با اجرای دستور زیر شما موفق به این کار خواهید شد.
grep –v “#” آدرس فایل
مثلا اگر فایل etc/apache2/sites-available/default-ssl/ هدف شما باشد باید اینگونه وارد کنید:
grep –v “#” /etc/apache2/sites-available/default-ssl
با استفاده از این دستور و همچنین دستور Find شما میتوانید فایلها را به ازای فرمتهای ذخیره شده جستجو و فیلتر نمایید. دستور زیر این کار را برای شما انجام میدهد:
find . –name “*.فرمت دلخواه” | grep –i نام دلخواه
به عنوان نمونه فرض کنید شما میخواهید تمام فایلهایی به اسم gitiserver را به فرمت mp3 بیابید. دستور زیر برای این منظور است:
find . –name “*.mp3” | grep –i gitiserver
همچنین اگر بخواهید در جستجوی شما فایلهایی به ازای نام خاصی نشان داده نشوند از دستور «vi-» استفاده کنید. مثلا در جستجوی بالا اگر بخواهید فایلهایی که عبارت host را در نام خود دارند نمایش داده نشوند مطابق دستور زیر عمل نمایید.
find . –name “*.mp3” | grep –i gitiserver | grep –vi “host”
با استفاده از عبارتهای «B-» و «A-» میتوانید چند خط قبل و بعد یک عبارتی که جستجو میکنید را مشاهده نمایید. مثلا اگر در فایل ifconfig بخواهید 4 خط بعد از eth0 را مشاهده نمایید دستور زیر را اجرا کنید:
ifconfig | grep –A 4 eth0
همچنین اگر میخواهید 2 خط قبل از عبارت UP را ببینید دستور زیر را بزنید:
ifconfig | grep -B 2 UP
ممکن است شما فقط بخواهید تعداد مشخصی از نتایج جستجو را مشاهده کنید. دستور زیر (برای جستجو در فایل ifconfig) چاره این کار است:
ifconfig | grep –C تعداد مورد نظر lo
مثلا برای مشاهده تنها 2 عدد از نتایج جستجو دستور زیر را باید اجرا کنید:
ifconfig | grep –C 2 lo
اگر بخواهید تنها تعداد نتایج حاصل از جستجو را بیابید باید از «c-» استفاده نمایید. برای مثال اگر تعداد نتایج جستجو در فایل ifconfig به ازای عبارت مشخص را بخواهید دستور زیر را باید وارد کنید:
ifconfig | grep –c inet6
اگر عبارتی از محتویات داخل فایل را بخواهید جستجو کنید میتوانید با grep این کار را انجام دهید. مثلا در جستجوی عبارتی که در کامپایل برنامه شما را دچار مشکل کرده است با استفاده از grep به این شکل میتواند شماره خط مربوط به خطای آن را به شما نمایش دهد؛ مانند دستور زیر که در فایل setup.py عبارت main را جستجو میکند:
grep –n “main” setup.py
برای جستجوی یک رشته در تمام دایرکتوریهای سیستم از دستور زیر استفاده کنید.
grep –r “function” *
این دستور رشته «function» را در تمام دایرکتوریهای شما جستجو میکند.
با عبارت «w-» شما میتوانید جستجو را بر طبق الگوی خاص انجام دهید:
ifconfig | grep –w “RUNNING”
با این دستور خط حاوی الگوی «RUNNING» برای شما نمایش داده میشود.
برای جستجو در فایلهای فشرده هم میتوانید به شیوه زیر از این دستور استفاده نمایید.
zgrep –i error /var/log/syslog.2.gz
دستور فوق عبارت error را در فایل فشرده /var/log/syslog.2.gz جستجو میکند.
grep -nr b
از ابزار grep به شیوههای مختلف و با اهداف متفاوت استفاده میشود. در این مقاله ما چند نمونه پرکاربردترین آنها را برای شما بیان کردیم.
با این دستورات میتوانید فایلهای مورد نظر خود را در سریعترین زمان بیابید.
به همین سادگی!!
تمامی حقوق برای گیتی سرور محفوظ است.
سلام. چجوری میتونیم با دستور grep شماره خط هایی که متن خاصی را دارند نشان داد؟
سلام
فقط کافیه که عبارت n- هم اضافه کنید. برای مثال:
grep -nr b