معرفی
فرمان لینوکس grep به عنوان یک روش برای فیلتر کردن ورودی استفاده می شود.
GREP به معنای عبارات منظم جهانی است و بنابراین برای استفاده از آن به طور موثر، شما باید برخی از عبارات منظم داشته باشید.
در این مقاله، من قصد دارم به شما تعدادی از نمونه هایی را که به شما در درک دستورات grep کمک می کند، نشان دهید.
01 از 09
چگونه می توان برای یک رشته در یک فایل با استفاده از GREP جستجو کرد
تصور کنید که یک فایل متنی به نام کتاب ها با عناوین کتاب های کودکان زیر داشته باشید:
- رابین هود
- هود کوچک قرمز سواری
- پیتر پن
- Goldilocks و سه خرس
- سفید برفی و هفت کوتوله
- پینوشیو
- گربه در کلاه
- سه خوک کوچک
- Gruffalo
- چارلی و کارخانه شکلات سازی
برای پیدا کردن همه کتاب ها با کلمه "The" در عنوان شما از نحو زیر استفاده می کنید:
grep کتاب ها
نتایج زیر بازمی گردد:
- Goldilocks و سه خرس
- سفید برفی و هفت کوتوله
- گربه در کلاه
- سه خوک کوچک
- Gruffalo
- چارلی و کارخانه شکلات سازی
در هر مورد، کلمه "The" نمایش داده خواهد شد.
توجه داشته باشید که جستجو حس حساسی است، بنابراین اگر یکی از عناوین به جای "The" به جای "آن" باشد، پس از آن بازگشت نخواهد شد.
برای نادیده گرفتن مورد شما میتوانید سوئیچ زیر را اضافه کنید:
کتاب ها را بیاموزید
شما همچنین می توانید از کلید -i به صورت زیر استفاده کنید:
grep -i کتاب ها
02 از 09
جستجو برای یک رشته در یک فایل با استفاده از wildcards
فرمان grep بسیار قدرتمند است. شما می توانید بسیاری از تکنیک های تطبیق الگو را برای فیلتر کردن نتایج استفاده کنید.
در این مثال، به شما نشان خواهم داد که چگونه یک رشته را در یک فایل با استفاده از wildcards جستجو کنید .
تصور کنید که یک فایل به نام مکان هایی با نام مکان های اسکاتلندی زیر دارید:
ابردین
aberystwyth
aberlour
غریبه
اوورنس
نیوبرگ
گوزن جدید
گالووی جدید
glasgow
ادینبورگ
اگر میخواهید همه مکانهایی را پیدا کنید که در نام دارند، از نحو زیر استفاده کنید:
grep inver * مکان ها
علامت ستاره ستاره (*) برای 0 یا تعداد زیادی است. بنابراین اگر شما محل مکانی به نام inver یا مکانی به نام inverness نامیده باشید، هر دو می توانند بازگردانده شوند.
علامت دیگری که می توانید استفاده کنید دوره (.) است. شما می توانید از این برای مطابقت با یک نامه استفاده کنید.
grep inver.r مکان ها
دستور بالا مکان هایی را به نام inverurie و inverary پیدا می کند اما invereerie را پیدا نمی کند، زیرا فقط می تواند یک علامت میان دو رشته وجود داشته باشد، همانطور که در یک دوره واحد مشخص می شود.
واژگان دوره ای مفید است، اما اگر بخشی از متن مورد نظر شما را داشته باشید، می توانید مشکلات ایجاد کنید.
به عنوان مثال به این لیست از نام دامنه نگاه کنید
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.com
- هر روزه
- google.co.uk
- google.au
- direct.gov.uk
برای پیدا کردن همه about.coms شما فقط می توانید با استفاده از نحو زیر جستجو کنید:
grep * درباره * domainnames
دستورالعمل بالا در صورت لزوم نام زیر در آن وجود دارد:
- everydaylinuxuser.com/about.html
بنابراین می توانید از نحو زیر استفاده کنید:
grep * about.com domainnames
این کار خوب است مگر اینکه یک دامنه با نام زیر داشته باشد:
aboutycom.com
برای واقعا جستجو برای مدت term about.com شما نیاز به فرار از نقطه به شرح زیر است:
grep * about \ .com domainnames
علامت نهایی برای نشان دادن شما علامت سوال است که برای صفر یا یک شخصیت است.
مثلا:
grep؟ ber نام های کاربری
فرمان فوق به ابردین، aberystwyth یا حتی berwick بازگشت.
03 از 09
جستجو برای رشته ها در آغاز و پایان خط با استفاده از grep
نماد (^) و دلار ($) به شما امکان می دهد الگوهای ابتدایی و انتهای خط را جستجو کنید.
تصور کنید که یک فایل با نام فوتبال به نام فوتبال داشته باشید:
- بلکپول
- لیورپول
- شهر منچستر
- لستر سیتی
- منچستر یونایتد
- باشگاه فوتبال نیوکاسل یونایتد
- FC منچستر یونایتد
اگر می خواهید تمام تیم هایی را که از منچستر شروع شده اند پیدا کنید، از نحو زیر استفاده می کنید:
grep ^ تیم های منچستر
فرماندهی فوق منچستر سیتی و منچستر یونایتد، اما منچستر یونایتد نیست.
همچنین شما می توانید تمام تیم هایی را که با یونایتد به پایان رسیده اند را با استفاده از نحوه زیر پیدا کنید:
grep United teams teams
فرماندهی فوق منچستر یونایتد و نیوکاسل یونایتد را برگردانده اما منچستر یونایتد نیست.
04 از 09
شمارش تعداد بازی ها با استفاده از grep
اگر نمیخواهید خطوط واقعی که الگو را با استفاده از grep مطابقت میدهند باز گردند اما فقط می خواهید بدانید که تعداد زیادی از آنها وجود دارد شما می توانید از نحو زیر استفاده کنید:
grep -c inputfile الگو
اگر الگوی با دو بار همگام سازی شود، شماره 2 برگشت می یابد.
05 از 09
پیدا کردن همه شرایطی که با grep مطابقت ندارند
تصور کنید که فهرستی از نام مکان را با کشورهای ذکر شده به شرح زیر میبینید:
- اتردین اسکاتلند
- اسکاتلند گلاسکو
- لیورپول انگلستان
- کولین خلیج
- لندن، انگلستان
شما ممکن است متوجه شده باشید که خلیج کلوین هیچ کشوری را با آن در ارتباط نیست.
برای جستجوی همه مکان ها با کشوری می توانید از نحو زیر استفاده کنید:
grep زمین $ مکان
نتایج به دست آمده در همه مکان ها به جز خلیج کلوین می باشد.
این بدیهی است که فقط برای مکان هایی که در زمین به پایان می رسد (به سختی علمی) کار می کند.
شما می توانید انتخاب کنید با استفاده از نحو زیر:
grep -v زمین $ مکان
این همه مکان هایی را که با زمین به پایان نرسید پیدا نمی کنند.
06 از 09
نحوه یافتن خطوط خالی در فایل ها با استفاده از grep
تصور کنید یک فایل ورودی دارید که توسط برنامه شخص ثالث مورد استفاده قرار می گیرد که زمانی که یک خط خالی را به صورت زیر پیدا می کند، خواندن فایل را متوقف می کند:
- اتردین اسکاتلند
- اسکاتلند Inverness
- لیورپول انگلستان
- کلوین بیل ولز
هنگامی که برنامه به خط بعد از لیورپول برسد، خواندن معنی آن را متوقف نخواهد کرد، به همین دلیل کلوین خلیج کاملا از دست رفته است.
شما می توانید از grep برای جستجوی خطوط خالی با نحو زیر استفاده کنید:
grep ^ $ مکان ها
متاسفانه این خصوصا مفید نیست زیرا فقط خطوط خالی را باز می کند.
البته می توانید تعداد خطوط خالی را به صورت چک کنید تا ببینید آیا فایل به شرح زیر است:
grep -c ^ $ مکان ها
با این وجود، مفیدتر است بدانیم که شماره خطوط دارای یک خط خالی است تا شما بتوانید آنها را جایگزین کنید. شما می توانید این کار را با دستور زیر انجام دهید:
grep -n ^ $ مکان ها
07 از 09
چگونه برای رشته های عددی بزرگ یا عددی کوچک با استفاده از grep جستجو کنید
با استفاده از grep شما می توانید تعیین کنید که کدام خطوط در یک پرونده دارای کاراکترهای بزرگ با استفاده از نحو زیر است:
grep '[AZ]' نام فایل
براکت های مربع [] اجازه می دهد تا شما از طیف وسیعی از کاراکتر ها استفاده کنید. در مثال فوق، هر شخصیتی بین A و Z مطابقت دارد.
بنابراین برای مطابقت با کاراکترهای کوچک، می توانید از نحو زیر استفاده کنید:
grep '[az]' نام فایل
اگر می خواهید فقط حروف و عددی یا سایر نمادها را مطابقت دهید، می توانید از نحو زیر استفاده کنید:
grep '[a-zA-Z]' نام فایل
شما می توانید همین کار را با شماره های زیر انجام دهید:
grep '[0-9]' نام فایل
08 از 09
به دنبال الگوهای تکراری با استفاده از grep
شما می توانید براکت یک الگوی تکرار استفاده کنید.
تصور کنید که یک فایل با شماره تلفن به صورت زیر است:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
شما می دانید قسمت اول این شماره باید سه رقمی باشد و شما می خواهید خطوطی را پیدا کنید که با این الگو مطابقت نداشته باشند.
از مثال قبلی شما می دانید که [0-9] همه اعداد را در یک فایل می گیرد.
در این مثال، ما می خواهیم خطوطی که با سه عدد شروع می شود و سپس یک خط (-) می شود. شما می توانید این کار را با نحو زیر انجام دهید:
grep "^ [0-9] [0-9] [0-9] -" اعداد
همانطور که از مثالهای قبلی می دانیم، carat (^) به این معنی است که خط باید با الگوی زیر شروع شود.
[0-9] هر عددی بین 0 و 9 را جستجو می کند. همانطور که این سه مرتبه آن را 3 عدد نشان می دهد. در نهایت، یک خط وجود دارد که نشان می دهد که یک خط فاصله باید سه عدد را به دست آورد.
با استفاده از براکت های پیچیده می توانید جستجو را کوچکتر به صورت زیر انجام دهید:
grep "^ [0-9] \ {3 \} -" اعداد
اسلش از {براکت به عنوان بخشی از عبارات منظم کار می کند اما اساسا آنچه که گفته می شود، [0-9] {3} است که به معنی هر عدد بین 0 و 9 سه بار است.
براکت های curly نیز می توانند به صورت زیر استفاده شوند:
{5،10}
{5،}
{5،10} بدین معنی است که شخصیتی که برای جستجو جستجو می شود باید حداقل 5 بار تکرار شود، اما نه بیش از 10، در حالی که {5،} به این معنی است که شخصیت باید حداقل 5 بار تکرار شود، اما می تواند بیشتر از آن باشد.
09 از 09
استفاده از خروجی از دستورات دیگر با استفاده از grep
تا کنون ما در تطبیق الگو در فایلهای فردی مورد بررسی قرار گرفته ایم اما grep می تواند خروجی را از دستورات دیگر به عنوان ورودی برای تطابق الگو استفاده کند.
مثال خوبی از این استفاده از دستور ps است که پروسه های فعال را فهرست می کند.
برای مثال دستور زیر را اجرا کنید:
ps -ef
تمام پروسه های در حال اجرا در سیستم شما نمایش داده می شود.
شما می توانید از grep برای جستجوی یک پروسه در حال اجرا خاص به صورت زیر استفاده کنید:
ps -ef | grep فایرفاکس