ریگولر ایکسپریشنز کے ساتھ grep (اور egrep) کا استعمال۔

Using Grep With Regular Expressions



یہ سبق دونوں کو استعمال کرنے کا طریقہ بتاتا ہے۔ گرفت (اور egrep) ٹی o فائلوں میں متن ، ان کی سادہ شکل میں اور جب باقاعدہ تاثرات کے ساتھ مل جائے۔ اس میں کئی شامل ہیں۔ مثالیں اور مشقیں ، مزید حل ، ناظرین کو مکمل کرنے کے لیے۔

نام گرفت ایڈ (اور ویم) کمانڈ جی/ری/پی سے آتا ہے ، جس کا مطلب ہے کہ عالمی سطح پر دی گئی باقاعدہ ایکسپریشن اور پرنٹ (ڈسپلے) آؤٹ پٹ تلاش کریں۔







باقاعدہ تاثرات۔

افادیت صارف کو ٹیکسٹ فائلوں کو ان لائنوں کے لئے تلاش کرنے کی اجازت دیتی ہے جو باقاعدہ اظہار سے مماثل ہوں ( regexp ). باقاعدہ ایکسپریشن ایک سرچ سٹرنگ ہے جو کہ متن اور 11 یا ایک سے زیادہ خاص حروف پر مشتمل ہے۔ ایک سادہ مثال ایک لائن کے آغاز سے مماثل ہے۔



نمونہ فائل۔

کی بنیادی شکل۔ گرفت کسی خاص فائل یا فائلوں میں سادہ متن تلاش کرنے کے لیے استعمال کیا جا سکتا ہے۔ مثالوں کو آزمانے کے لیے ، پہلے نمونہ فائل بنائیں۔



نیچے دیے گئے متن کو کاپی کرنے کے لیے نینو یا ویم جیسے ایڈیٹر کا استعمال کریں۔ myfile .





xyz
xyzde
exyzd
dexyz
d؟ gxyz
xxz
xzz
x z
x*z
xz
ایکس زیڈ
XYZ
XYYZ
xYz
xyz
xyyyz
xyyyyz

اگرچہ آپ متن میں مثالیں کاپی اور پیسٹ کر سکتے ہیں (نوٹ کریں کہ ڈبل حوالہ جات مناسب طریقے سے کاپی نہیں کر سکتے ہیں) ، کمانڈز کو صحیح طریقے سے سیکھنے کے لیے ٹائپ کرنے کی ضرورت ہے۔

مثالوں کو آزمانے سے پہلے ، نمونہ فائل دیکھیں:



$کیٹmyfile

سادہ تلاش۔

فائل کے اندر 'xyz' متن تلاش کرنے کے لیے درج ذیل کو چلائیں:

$گرفتxyz myfile

رنگوں کا استعمال۔

رنگوں کو ظاہر کرنے کے لیے ، olcolor (ایک ڈبل ہائفن) استعمال کریں یا صرف ایک عرف بنائیں۔ مثال کے طور پر:

$گرفت --رنگxyz myfile

یا

$عرف گرفت= 'گرفت--رنگ'
$گرفتxyz myfile

اختیارات

کے ساتھ استعمال ہونے والے عام اختیارات۔ گرفت کمانڈ میں شامل ہیں:

  • -مجھے تمام لائنیں ملیں۔ قطع نظر کیس کا
  • -سی شمار کتنی سطریں متن پر مشتمل ہیں۔
  • ڈسپلے لائن۔ نمبر مماثل لائنوں کی
  • -صرف ڈسپلے فائل نام وہ میچ
  • تکراری ذیلی ڈائریکٹریوں کی تلاش
  • -v تمام لائنیں تلاش کریں۔ نہیں متن پر مشتمل

مثال کے طور پر:

$گرفت -میںxyz myfile# کیس سے قطع نظر متن تلاش کریں۔

$گرفت xyz myfile# متن کے ساتھ لائنوں کی گنتی کریں۔

$گرفت -میںxyz myfile# لائن نمبر دکھائیں۔

ایک سے زیادہ فائلیں بنائیں۔

متعدد فائلوں کو تلاش کرنے سے پہلے ، پہلے کئی نئی فائلیں بنائیں:

$باہر پھینک دیاxyz>myfile1
$باہر پھینک دیا -اورxyz nxzz nXYZ۔>myfile2
$باہر پھینک دیا -اورxxx nyyy۔>myfile3
$کیٹmyfile1
$کیٹmyfile2
$کیٹmyfile3

ایک سے زیادہ فائلیں تلاش کریں۔

فائل کے نام یا وائلڈ کارڈ کا استعمال کرتے ہوئے متعدد فائلوں کو تلاش کرنے کے لیے درج کریں:

$گرفت xyz myfile myfile1 myfile2 myfile3
$گرفت -میںxyz میرا*
# فائل کے ناموں کا آغاز 'my' سے ہوتا ہے

ورزش I۔

  1. پہلے گنیں کہ فائل میں کتنی لائنیں ہیں /etc /passwd۔
اشارہ: استعمال کریں۔ڈبلیو سی - /وغیرہ/پاس ڈبلیو ڈی
  1. اب متن کے تمام واقعات تلاش کریں۔ کہاں فائل میں /etc /passwd .
  2. معلوم کریں کہ فائل میں کتنی لائنیں ہیں۔
  3. معلوم کریں کہ کتنی لائنیں متن پر مشتمل نہیں ہیں۔ کہاں .
  4. میں اپنے لاگ ان کے لیے اندراج تلاش کریں۔ /etc/passwd

ورزش کے حل اس مضمون کے آخر میں مل سکتے ہیں۔

باقاعدہ تاثرات کا استعمال۔

کمانڈ۔ گرفت تلاش کو بہتر بنانے کے لیے ایک یا زیادہ گیارہ خاص حروف یا علامتوں کا استعمال کرتے ہوئے باقاعدہ تاثرات کے ساتھ بھی استعمال کیا جا سکتا ہے۔ باقاعدہ اظہار ایک کریکٹر سٹرنگ ہے جس میں خاص حروف شامل ہوتے ہیں تاکہ افادیت میں پیٹرن مماثلت کی اجازت دی جاسکے۔ گرفت ، میں آیا اور sed . نوٹ کریں کہ تاروں کو حوالوں میں بند کرنے کی ضرورت پڑسکتی ہے۔

دستیاب خاص حروف میں شامل ہیں:

۔ ایک لائن کا آغاز۔
$ ایک لائن کا اختتام۔
. کوئی بھی کردار (سوائے line n نئی لائن کے)
* 0 یا اس سے زیادہ سابقہ ​​اظہار۔
۔ علامت سے پہلے اسے لفظی کردار بنا دیتا ہے۔

نوٹ کریں کہ *، جو کمانڈ لائن پر استعمال کیا جا سکتا ہے تاکہ کسی بھی تعداد میں حروف کو ملایا جا سکے۔ نہیں یہاں اسی طرح استعمال کیا جاتا ہے۔

مندرجہ ذیل مثالوں میں حوالوں کے استعمال کو بھی نوٹ کریں۔

مثالیں

^ حرف کا استعمال کرتے ہوئے متن سے شروع ہونے والی تمام لائنیں تلاش کرنے کے لیے:

$گرفت'^xyz' myfile۔

$ کریکٹر کا استعمال کرتے ہوئے متن کے ساتھ ختم ہونے والی تمام لائنیں تلاش کرنے کے لیے:

$گرفت'xyz $' myfile۔

lines اور $ دونوں حروف کا استعمال کرتے ہوئے سٹرنگ والی لائنیں تلاش کرنے کے لیے:

$گرفت'^xyz $' myfile۔

کا استعمال کرتے ہوئے لائنیں تلاش کرنے کے لیے۔ . کسی بھی کردار سے ملنے کے لیے:

$گرفت'^x.z' myfile۔

پچھلے اظہار کے 0 یا اس سے زیادہ سے ملنے کے لیے * کا استعمال کرتے ہوئے لائنیں تلاش کرنے کے لیے:

$گرفت^xy*z 'myfile

کسی بھی کردار کے 0 یا اس سے زیادہ سے ملنے کے لیے.* کا استعمال کرتے ہوئے لائنیں تلاش کرنے کے لیے:

$گرفت'' ایکس۔*z 'myfile

کا استعمال کرتے ہوئے لائنیں تلاش کرنے کے لیے۔ ۔ * کردار سے بچنے کے لیے:

$گرفت’’ ایکس ‘‘*z 'myfile

کردار کا استعمال تلاش کرنے کے لیے:

$گرفت'\' myfile

اظہار grep - egrep

کی گرفت کمانڈ دستیاب باقاعدہ تاثرات کے صرف ایک سب سیٹ کی حمایت کرتا ہے۔ تاہم ، حکم egrep:

  • تمام باقاعدہ تاثرات کے مکمل استعمال کی اجازت دیتا ہے۔
  • بیک وقت ایک سے زیادہ تاثرات تلاش کر سکتے ہیں۔

نوٹ کریں کہ تاثرات کوٹ کے جوڑے کے اندر بند ہونا چاہیے۔

رنگ استعمال کرنے کے لیے ، usecolor استعمال کریں یا پھر ایک عرف بنائیں:

$عرف egrep='egrep --color'

ایک سے زیادہ کی تلاش کے لیے۔ ریجیکس کی egrep کمانڈ کئی لائنوں پر لکھا جا سکتا ہے۔ تاہم ، یہ ان خاص حروف کا استعمال کرتے ہوئے بھی کیا جا سکتا ہے:

| متبادل ، یا تو ایک یا دوسرا۔
(…) اظہار کے حصے کی منطقی گروہ بندی۔
$egrep '(^جڑ | uc uucp |^میل)' /وغیرہ/پاس ڈبلیو ڈی

یہ لائنوں کو نکالتا ہے جو فائل سے جڑ ، uucp یا میل سے شروع ہوتی ہیں ، | علامت کا مطلب اختیارات میں سے کوئی بھی ہے۔

مندرجہ ذیل کمانڈ کرے گا۔ نہیں کام ، اگرچہ کوئی پیغام ظاہر نہیں ہوتا ، بنیادی کے بعد سے۔ گرفت کمانڈ تمام باقاعدہ تاثرات کی حمایت نہیں کرتا:

$گرفت '(^جڑ | uc uucp |^میل)' /وغیرہ/پاس ڈبلیو ڈی

تاہم ، زیادہ تر لینکس سسٹم پر کمانڈ۔ grep -E استعمال کرنے کے مترادف ہے۔ egrep :

$گرفت -اور '(^جڑ | uc uucp |^میل)' /وغیرہ/پاس ڈبلیو ڈی

فلٹرز کا استعمال۔

پائپنگ ایک کمانڈ کے آؤٹ پٹ کو دوسری کمانڈ میں بطور ان پٹ بھیجنے کا عمل ہے اور یہ لینکس کے سب سے طاقتور ٹولز میں سے ایک ہے۔

پائپ لائن میں ظاہر ہونے والے کمانڈز کو اکثر فلٹرز کہا جاتا ہے کیونکہ بہت سے معاملات میں وہ ان پٹ کو تبدیل کرتے ہیں یا ان میں ترمیم شدہ ترمیم شدہ سٹریم کو معیاری آؤٹ پٹ پر بھیجنے سے پہلے۔

مندرجہ ذیل مثال میں ، سے معیاری پیداوار۔ ls -l کو معیاری ان پٹ کے طور پر منظور کیا جاتا ہے۔ گرفت کمانڈ. سے آؤٹ پٹ۔ گرفت پھر کمانڈ کو بطور ان پٹ منتقل کیا جاتا ہے۔ مزید کمانڈ.

یہ صرف ڈائریکٹریوں کو ظاہر کرے گا۔ /وغیرہ :

$ایل ایس - /وغیرہ|گرفت'ڈی'|مزید

مندرجہ ذیل کمانڈ فلٹرز استعمال کرنے کی مثالیں ہیں۔

$پی ایس -ایف۔|گرفتکرون

$ڈبلیو ایچ او|گرفتکے ڈی ایم

نمونہ فائل۔

جائزہ لینے کی مشق کو آزمانے کے لیے ، پہلے درج ذیل نمونہ فائل بنائیں۔

نیچے دیے گئے متن کو کاپی کرنے کے لیے نینو یا ویم جیسے ایڈیٹر کا استعمال کریں۔ لوگ:

ذاتی جے سمتھ 25000
ذاتی E.Smith 25400
تربیت A.Brown 27500
ٹریننگ C. بروین 23400۔
(ایڈمن) آر برون 30500۔
Goodsout T.Smyth 30000۔
ذاتی ایف جونز 25000
تربیت* C.Evans 25500۔
گڈس آؤٹ ڈبلیو پوپ 30400
گراؤنڈ فلور T.Smythe 30500
ذاتی جے میلر 33000

ورزش II۔

  1. فائل ڈسپلے کریں۔ لوگ اور اس کے مندرجات کا جائزہ لیں۔
  2. سٹرنگ پر مشتمل تمام لائنیں تلاش کریں۔ سمتھ فائل میں.
  3. ایک نئی فائل بنائیں ، لوگ ، جس میں سٹرنگ سے شروع ہونے والی تمام لائنیں ہوں۔ ذاتی۔ لوگوں کی فائل میں۔ اشارہ: grep کے ساتھ کمانڈ استعمال کریں۔
  4. فائل کی فہرست بنا کر فائل کے مندرجات کی تصدیق کریں۔
  5. اب وہ تمام لائنیں شامل کریں جہاں متن سٹرنگ کے ساتھ ختم ہوتا ہے۔ 500۔ فائل میں لوگوں کو فائل npeople.Hint: grep کے ساتھ کمانڈ استعمال کریں۔
  6. ایک بار پھر ، فائل کے مندرجات کی تصدیق کریں۔
  7. سرور کا IP پتہ ڈھونڈیں جو فائل میں محفوظ ہے۔ /etc/hosts۔ اشارہ: $ (میزبان نام) کے ساتھ grep کمانڈ استعمال کریں
  8. استعمال کریں۔ egrep سے نکالنا /etc/passwd فائل اکاؤنٹ لائنز پر مشتمل ہے۔ ایل پی یا آپ کی اپنی صارف کی شناخت .

ورزش کے حل اس مضمون کے آخر میں مل سکتے ہیں۔

مزید باقاعدہ تاثرات۔

ایک باقاعدہ اظہار کو سٹیرائڈز پر وائلڈ کارڈ کے طور پر سوچا جا سکتا ہے۔

خاص معنی کے ساتھ گیارہ حروف ہیں: افتتاحی اور اختتامی مربع بریکٹ [] ، بیک سلیش ، کیریٹ ^، ڈالر کا نشان $ ، مدت یا نقطہ۔ ، عمودی بار یا پائپ علامت | ، سوالیہ نشان؟ ستارہ یا ستارہ *، جمع نشان + اور افتتاحی اور اختتامی راؤنڈ بریکٹ {}۔ یہ خاص کردار اکثر میٹا کریکٹر بھی کہلاتے ہیں۔

یہاں خاص حروف کا مکمل مجموعہ ہے:

۔ ایک لائن کا آغاز۔
$ ایک لائن کا اختتام۔
. کوئی بھی کردار (سوائے line n نئی لائن کے)
* 0 یا اس سے زیادہ سابقہ ​​اظہار۔
| متبادل ، یا تو ایک یا دوسرا۔
[…] مماثل حروف کا واضح مجموعہ۔
+ 1 یا اس سے زیادہ سابقہ ​​اظہار۔
؟ 0 یا 1 پچھلے اظہار کا۔
۔ علامت سے پہلے اسے لفظی کردار بنا دیتا ہے۔
{…} واضح کوانٹیفائر نوٹیشن۔
(…) اظہار کے حصے کی منطقی گروہ بندی۔

کا ڈیفالٹ ورژن۔ گرفت صرف باقاعدہ اظہار کی حمایت ہے۔ مندرجہ ذیل تمام مثالوں کے کام کرنے کے لیے ، استعمال کریں۔ egrep اس کے بجائے یا grep -E .

کا استعمال کرتے ہوئے لائنیں تلاش کرنے کے لیے۔ | کسی ایکسپریشن سے مماثل:

$egrep'xxz|xzz 'myfile

کا استعمال کرتے ہوئے لائنیں تلاش کرنے کے لیے سٹرنگ کے اندر کسی ایکسپریشن سے ملنے کے لیے () بھی استعمال کریں:

$egrep'' ایکس۔(Yz|yz)'myfile

کسی بھی کردار سے ملنے کے لیے [] کا استعمال کرتے ہوئے لکیریں تلاش کرنے کے لیے:

$egrep'' ایکس۔[وائی]z 'myfile

کسی حرف سے مماثل نہ ہونے کے لیے [] کا استعمال کرتے ہوئے لکیریں تلاش کرنے کے لیے:

$egrep'' ایکس۔[y ہاں۔]z 'myfile

پچھلے اظہار کے 0 یا اس سے زیادہ سے ملنے کے لیے * کا استعمال کرتے ہوئے لائنیں تلاش کرنے کے لیے:

$egrep^xy*z 'myfile

پچھلے اظہار کے 1 یا زیادہ سے ملنے کے لیے + کا استعمال کرتے ہوئے لائنیں تلاش کرنے کے لیے:

$egrep'^xy+z' myfile۔

استعمال کرتے ہوئے لائنیں تلاش کرنے کے لئے؟ پچھلے اظہار کے 0 یا 1 سے ملنے کے لیے:

$egrep'^xy؟ z' myfile

ورزش III۔

  1. ناموں پر مشتمل تمام لائنیں تلاش کریں۔ ایونز یا پینٹر فائل لوگوں میں.
  2. ناموں پر مشتمل تمام لائنیں تلاش کریں۔ سمتھ ، سمتھ۔ یا سمتھ فائل لوگوں میں.
  3. ناموں پر مشتمل تمام لائنیں تلاش کریں۔ براؤن ، براون۔ یا ذریعہ فائل لوگوں میں اگر آپ کے پاس وقت ہے:
  4. تار پر مشتمل لائن تلاش کریں۔ (ایڈمن) ، فائل لوگوں میں بریکٹ سمیت۔
  5. فائل لوگوں میں کریکٹر * پر مشتمل لائن تلاش کریں۔
  6. دونوں تاثرات تلاش کرنے کے لیے اوپر 5 اور 6 کو ملا دیں۔

مزید مثالیں۔

استعمال کرتے ہوئے لائنیں تلاش کرنے کے لیے۔ . اور * حروف کے کسی بھی سیٹ سے مماثل:

$egrep^xy.*z 'myfile

حروف کی تعداد N سے مماثل کرنے کے لیے {} کا استعمال کرتے ہوئے لائنیں تلاش کرنے کے لیے:

$egrep^xy{}z 'myfile
$egrep^xy{}z 'myfile

{} کا استعمال کرتے ہوئے لائنوں کو N یا اس سے زیادہ بار ملاحظہ کرنے کے لیے:

$egrep^xy{،}z 'myfile

لائنوں کو تلاش کرنے کے لیے {} کا استعمال N اوقات سے ملتا ہے لیکن M اوقات سے زیادہ نہیں:

$egrep^xy{،}z 'myfile

نتیجہ

اس سبق میں ہم نے سب سے پہلے استعمال کرتے ہوئے دیکھا۔ گرفت فائل میں یا ایک سے زیادہ فائلوں میں متن تلاش کرنے کے لیے اس کی سادہ شکل میں۔ اس کے بعد ہم نے متن کو جوڑ کر سادہ باقاعدہ تاثرات کے ساتھ تلاش کیا اور پھر زیادہ پیچیدہ استعمال کیا۔ egrep .

اگلے مراحل

مجھے امید ہے کہ آپ یہاں حاصل کردہ علم کو اچھے استعمال میں لائیں گے۔ آزمائیں۔ گرفت آپ کے اپنے ڈیٹا پر احکامات اور یاد رکھیں ، باقاعدہ تاثرات جیسا کہ یہاں بیان کیا گیا ہے اسی شکل میں استعمال کیا جا سکتا ہے۔ ہم ، sed اور عجیب !

ورزش کے حل۔

ورزش I۔

پہلے گنیں کہ فائل میں کتنی لائنیں ہیں۔ /etc/passwd .
$ wc -l /etc/passwd
اب متن کے تمام واقعات تلاش کریں۔ کہاں فائل میں /etc /passwd.
$ grep var /etc/passwd
معلوم کریں کہ فائل میں کتنی لائنیں ہیں۔ کہاں

گرفت -سیکہاں/وغیرہ/پاس ڈبلیو ڈی

معلوم کریں کہ کتنی لائنیں متن پر مشتمل نہیں ہیں۔ کہاں .

گرفت -سی ویکہاں/وغیرہ/پاس ڈبلیو ڈی

میں اپنے لاگ ان کے لیے اندراج تلاش کریں۔ /etc/passwd فائل
grep kdm /etc/passwd

ورزش II۔

فائل ڈسپلے کریں۔ لوگ اور اس کے مندرجات کا جائزہ لیں۔
$ cat people
سٹرنگ پر مشتمل تمام لائنیں تلاش کریں۔ سمتھ فائل میں لوگ .
$ grep 'Smith' people
ایک نئی فائل بنائیں ، لوگ ، سٹرنگ سے شروع ہونے والی تمام لائنوں پر مشتمل ہے۔ ذاتی۔ میں لوگ فائل
$ grep '^Personal' people> npeople
فائل کے مندرجات کی تصدیق کریں۔ لوگ فائل کی فہرست کے ذریعے.
$ cat npeople
اب وہ تمام لائنیں شامل کریں جہاں متن سٹرنگ کے ساتھ ختم ہوتا ہے۔ 500۔ فائل میں لوگ فائل کو لوگ .
$ grep '500$' people>>npeople
ایک بار پھر ، فائل کے مندرجات کی تصدیق کریں۔ لوگ فائل کی فہرست کے ذریعے.
$ cat npeople
سرور کا IP پتہ ڈھونڈیں جو فائل میں محفوظ ہے۔ /etc/hosts۔ .
$ grep $(hostname) /etc/hosts
استعمال کریں۔ egrep سے نکالنا /etc/passwd فائل اکاؤنٹ لائنز پر مشتمل ہے۔ ایل پی یا آپ کی اپنی یوزر آئی ڈی۔
$ egrep '(lp|kdm:)' /etc/passwd

ورزش III۔

ناموں پر مشتمل تمام لائنیں تلاش کریں۔ ایونز یا پینٹر فائل میں لوگ .
$ egrep 'Evans|Maler' people
ناموں پر مشتمل تمام لائنیں تلاش کریں۔ سمتھ ، سمتھ یا سمتھ فائل میں لوگ .
$ egrep 'Sm(i|y)the?' people
ناموں پر مشتمل تمام لائنیں تلاش کریں۔ براؤن ، براؤن یا ذریعہ فائل لوگوں میں.
$ egrep 'Brow?e?n' people
تار پر مشتمل لائن تلاش کریں۔ (ایڈمن) ، فائل میں بریکٹ سمیت۔ لوگ .

$egrep ' (ایڈمن)'لوگ

کردار پر مشتمل لائن تلاش کریں۔ * فائل لوگوں میں.
$ egrep '*' people
دونوں تاثرات تلاش کرنے کے لیے اوپر 5 اور 6 کو ملا دیں۔

$egrep ' (ایڈمن ) | *'لوگ