12 مثال کاربردی از دستور grep در لینوکس
grep یک جستجوگر قدرتمند فایل است که در تمامی توزیع های لینوکس نصب است. اگر به هر دلیلی در سیستم شما نصب نشده است، می توانید به راحتی آن را از طریق مدیریت بسته خود نصب کنید (apt-get در دبیان / اوبونتو و yum در RHEL / CentOS / فدورا).
1 |
$ sudo apt-get install grep #Debian/Ubuntu |
1 |
$ sudo yum install grep #RHEL/CentOS/Fedora |
1. جستجو و یافتن فایل ها
بگذارید بگوییم که شما یک نسخه تازه از اوبونتو جدید را بر روی دستگاه خود نصب کرده اید و قصد دارید یک اسکریپت Python را اجرا کنید. شما در حال جستجو کردن وب برای جستجوی آموزشی هستید، اما می بینید که دو نسخه متفاوت از Python برای استفاده وجود دارد و نمی دانید که کدام نسخه دارد استفاده می شود برای مشاهده نسخه استفاده شده به سادگی این دستور را اجرا کنید:
1 |
# dpkg -l | grep -i python |
1 2 3 4 |
ii python2.7 2.7.3-0ubuntu3.4 Interactive high-level object-oriented language (version 2.7) ii python2.7-minimal 2.7.3-0ubuntu3.4 Minimal subset of the Python language (version 2.7) ii python-openssl 0.12-1ubuntu2.1 Python wrapper around the OpenSSL library ii python-pam 0.4.2-12.2ubuntu4 A Python interface to the PAM library |
ابتدا dpkg -l را اجرا کردیم که لیستی از بسته های نصب شده *.deb را در سیستم شما نشان می دهد. دوم اینکه ما این خروجی را به grep -i python پیاده کردیم، که به سادگی grep خروجی را فیلتر کرده و همه بسته هایی را که “python” در نام خود دارند را نمایش می دهد. گزینه -i را برای حساس نبودن به حروف بزرگ و کوچک استفاده شده است. با استفاده از گزینه -i یک عادت خوب برای وارد شدن است، مگر اینکه به طور خاص شما سعی می کنید یک جستجوی دقیق تر از آن را انجام دهید.
2. جستجو و فیلتر فایل ها
grep همچنین می تواند برای جستجو و فیلتر در فایل های شخصی یا چندین فایل استفاده شود. اجازه دهید این سناریو را انجام دهیم:
برای مثال ما می خواهیم تمامی خطوط در فایل /etc/apache2/sites-available/default-ssl را بجز خط های اطلاعات نمایش دهیم
1 |
# grep –v “#” /etc/apache2/sites-available/default-ssl |
گزینه -v به این معنی است که تمامی خطوط را بجز خطوطی که با # شروع می شوند، چاپ می کند.
3. پیدا کردن همه فایل ها با فرمت mp3
grep می تواند برای فیلتر کردن از stdout مفید باشد. به عنوان مثال، بگذارید بگوییم شما یک پوشه کامل از فایل های موسیقی را در یک دسته از فرمت های مختلف داشته باشید. شما می خواهید تمام فایل های *.mp3 را از
هنرمند JayZ پیدا کنید، اما شما نمی خواهید آهنگ های remixed را مشاهده کنید. با استفاده از یک فرمان find و grep این روش را انجام می دهیم:
1 |
# find . –name “*.mp3” | grep –i JayZ | grep –vi “remix” |
در این مثال، ما با استفاده از find همه فایل ها را با یک فرمت *.mp3 چاپ می کنیم، pipp را به grep-i برای فیلتر کردن و چاپ تمام فایل ها با نام “JayZ” و سپس یک pipe دیگر برای grep -vi که فیلترها خارج شده و تمام نام فایل ها را با رشته (در هر صورت) “remix” چاپ نمی کند.
4. نمایش چند خط مشخص قبل و بعد از رشته جستجو شده
چند گزینه دیگر سوئیچ های -A و -B هستند که خط همخوانی و تعداد خطوط را که قبل یا بعد از رشته جستجو می آیند نمایش می دهد. -A = بعد، و -B = قبل:
1 2 |
# ifconfig | grep –A 4 eth0 # ifconfig | grep -B 2 UP |
5. نمایش تعداد مشخص از جستجو
گزینه C- مشابه گزینه های بالا است، اما به جای چاپ خطوط که قبل یا بعد از رشته آمده است، تعداد مشخص شده از یافته ها را نمایش می دهد برای مثال دستور زیر تنها 2 عدد از نتیجه جستجو را نمایش می دهد
1 |
# ifconfig | grep –C 2 lo |
6. شمارش نتیجه جستجو
با گزینه -c به راحتی می توان در خروجی تنها تعداد یافته های جستجو را دید.
1 |
# ifconfig | grep –c inet6 |
7. جستجو یک رشته در یک فایل
گزینه -n برای grep بسیار مفید است هنگام اشکال زدایی فایل ها در هنگام خطا کامپایل شماره خط را در فایل رشته جستجوی کرده و نمایش می دهد:
1 |
# grep –n “main” setup.py |
8. جستجوی یک رشته در تمامی دایرکتوری ها
1 |
# grep –r “function” * |
9. جستجو بر اساس یک الگوی خاص
گزینه -w به grep جستجو برای تمام الگو است که در رشته است. به عنوان مثال، با استفاده از:
1 |
# ifconfig | grep –w “RUNNING” |
خط حاوی الگوی در نقل قول را چاپ می کند. از سوی دیگر، اگر شما سعی می کنید:
1 |
# ifconfig | grep –w “RUN” |
10. جستجوی یک رشته در فایل های فشرده
برخی از موارد ذکر شده عبارتند از مشتقات grep. اول zgrep است، که، شبیه zcat، برای استفاده در فایل های gzip شده است. همان گزینه هایی را که grep در آن قرار دارد را می گیرد و به همان شیوه استفاده می شود:
1 |
# zgrep –i error /var/log/syslog.2.gz |
11. جستجوی متغییرهای محیطی در فایل ها
Egrep یکی دیگر از مشتقات است که عبارت “Extension of Regular Extension Global” را نشان می دهد. این دستور را با همام دستور grep و با گزینه -E می توان استفاده کرد.
1 |
# grep –E |
12. جستجو در قالب یک رشته
fgrep یک فایل یا لیست فایل ها را برای یک رشته الگوی ثابت جستجو می کند. همانند grep -F است. یک روش معمول برای استفاده از fgrep این است که پروندهی الگوهایی را به آن منتقل کنید:
1 |
# fgrep –f file_full_of_patterns.txt file_to_search.txt |
این فقط یک نقطه شروع با grep است، اما همانطور که مشاهده کردید برای مقاصد مختلف ارزشمند است. به جز دستورات ساده یک خط که ما اجرا کرده ایم، grep می تواند برای نوشتن کارهای قدرتمند cron و اسکریپت های پوسته قوی برای شروع استفاده شود.