انڈروئد

فائلوں میں سٹرنگ ڈھونڈنے اور تبدیل کرنے کیلئے سیڈ کا استعمال کیسے کریں

آیت الکرسی کی ایسی تلاوت آپ نے شاید پہلے@ کبهی نہ سنی هوU

آیت الکرسی کی ایسی تلاوت آپ نے شاید پہلے@ کبهی نہ سنی هوU

فہرست کا خانہ:

Anonim

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

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

، ہم اس کے بارے میں بات کریں گے کہ کس طرح سیڈ کے ساتھ ڈور ڈھونڈیں اور ان کی جگہ لیں۔ ہم آپ کو یہ بھی دکھائیں گے کہ کس طرح تکرار انگیز تلاشی کی جائے اور اسے تبدیل کیا جائے۔

سیڑ کے ساتھ سٹرنگ کو ڈھونڈیں اور ان کی جگہ لیں

ان کے مابین کچھ عملی اختلافات کے ساتھ ، sed متعدد ورژن موجود ہیں۔ میکوس BSD ورژن استعمال کرتا ہے اور زیادہ تر لینکس کی تقسیم GNU sed ساتھ آتی ہے جو پہلے سے نصب شدہ ہے۔ ہم GNU ورژن استعمال کریں گے۔

sed کا استعمال کرتے ہوئے متن کی تلاش اور اس کی جگہ لینے کی عمومی شکل مندرجہ ذیل شکل اختیار کرتی ہے۔

sed -i 's/SEARCH_REGEX/REPLACEMENT/g' INPUTFILE

  • -i - پہلے سے طے شدہ sed اپنی پیداوار کو معیاری آؤٹ پٹ پر لکھتا ہے۔ یہ آپشن فائلوں کو اپنی جگہ پر ترمیم کرنے کے لئے بتاتا ہے۔ اگر ایکسٹینشن فراہم کی جاتی ہے تو (ex-i.bak) اصل فائل کا بیک اپ تیار ہوجائے گا۔ s - متبادل کمانڈ ، غالبا in سب سے زیادہ استعمال شدہ کمانڈ۔ / / / - ڈیلییمٹر کیریکٹر۔ یہ کوئی بھی کردار ہوسکتا ہے لیکن عام طور پر سلیش ( / ) کردار استعمال ہوتا ہے۔ SEARCH_REGEX - تلاش کرنے کے لئے عمومی تار یا باقاعدہ اظہار۔ REPLACEMENT - متبادل ڈور g - عالمی متبادل پرچم ڈیفالٹ کے مطابق ، SEARCH_REGEX فائل لائن کو لائن کے ذریعہ پڑھتا ہے اور کسی لائن میں صرف SEARCH_REGEX پہلی SEARCH_REGEX کو تبدیل کرتا ہے۔ جب متبادل پرچم فراہم کیا جائے گا ، تمام واقعات کو تبدیل کردیا جائے گا۔ INPUTFILE - فائل کا نام جس پر آپ کمانڈ چلانا چاہتے ہیں۔

دلیل کے آس پاس قیمت درج کرنا ایک اچھا عمل ہے تاکہ شیل میٹا حروف میں اضافہ نہ ہو۔

آئیے مثال کے طور پر فائلوں میں متن کو تلاش کرنے اور اس کے عام طور پر استعمال ہونے والے کچھ اختیارات اور جھنڈوں سے بدلنے کے لئے کس طرح کمانڈ استعمال کریں گے۔

مظاہرے کے مقاصد کے ل we ، ہم مندرجہ ذیل فائل کا استعمال کریں گے۔

file.txt

123 Foo foo foo foo /bin/bash Ubuntu foobar 456

sed -i 's/foo/linux/' file.txt

123 Foo linux foo linux /bin/bash Ubuntu foobar 456

عالمی متبادل پرچم کے ساتھ ، تلاش کے نمونوں کے تمام واقعات کی جگہ لے لی جاتی ہے۔

sed -i 's/foo/linux/g' file.txt

123 Foo linux linux linux /bin/bash Ubuntu linuxbar 456

جیسا کہ آپ نے محسوس کیا ہوگا ، پچھلی مثال میں foobar سٹرنگ کے اندر اسٹریننگ foo کو بھی تبدیل کردیا گیا ہے۔ اگر یہ مطلوبہ سلوک نہیں ہے تو ، لفظی حد بندی اظہار ( \b ) کو تلاش کے اسٹرنگ کے دونوں سروں پر استعمال کریں۔ یہ یقینی بناتا ہے کہ جزوی الفاظ کی مماثلت نہیں کی جارہی ہے۔

sed -i 's/\bfoo\b/linux/g' file.txt

123 Foo linux linux linux /bin/bash Ubuntu foobar 456

پیٹرن میچ کیس کو غیر حساس بنانے کیلئے ، I جھنڈا استعمال کریں۔ ذیل کی مثال میں ہم g اور I دونوں جھنڈے استعمال کررہے ہیں۔

sed -i 's/foo/linux/gI' file.txt

123 linux linux linux linux /bin/bash Ubuntu linuxbar 456

sed -i 's/\/bin\/bash/\/usr\/bin\/zsh/g' file.txt

آسان اور بہت زیادہ پڑھنے کے قابل آپشن یہ ہے کہ ایک اور ڈلیمیٹر کردار استعمال کریں۔ زیادہ تر لوگ عمودی بار ( | ) یا بڑی آنت (:) استعمال کرتے ہیں لیکن آپ کوئی دوسرا کردار استعمال کرسکتے ہیں:

sed -i 's|/bin/bash|/usr/bin/zsh|g' file.txt

123 Foo foo foo foo /usr/bin/zsh Ubuntu foobar 456

آپ باقاعدہ تاثرات بھی استعمال کرسکتے ہیں۔ مثال کے طور پر تمام 3 ہندسوں کی تعداد تلاش کرنا اور ان کی جگہ اسٹرنگ number آپ استعمال کریں گے:

sed -i 's/\b\{3}\b/number/g' file.txt

number Foo foo foo foo /bin/bash demo foobar number

سیڈ کی ایک اور مفید خصوصیت یہ ہے کہ آپ ایمپرسینڈ کریکٹر استعمال کرسکتے ہیں & جو مماثل نمونہ کے مساوی ہے۔ کردار ایک سے زیادہ بار استعمال کیا جا سکتا ہے۔

مثال کے طور پر ، اگر آپ ہر 3 عددی نمبر کے ارد گرد گھوبگھرالی منحنی خطوط وحدانی to add شامل کرنا چاہتے ہیں تو ، ٹائپ کریں:

sed -i 's/\b\{3}\b/{&}/g' file.txt

{123} Foo foo foo foo /bin/bash demo foobar {456}

آخری لیکن کم از کم ، یہ ہمیشہ اچھ ideaا خیال ہوتا ہے کہ جب sed ساتھ کسی فائل میں ترمیم کرتے ہو تو بیک اپ بنائیں۔ ایسا کرنے کے لئے صرف -i آپشن میں توسیع فراہم کریں۔ مثال کے طور پر ، file.txt ترمیم کرنے اور اصل فائل کو file.txt.bak بطور محفوظ کرنے کے file.txt.bak you آپ استعمال کریں گے:

sed -i.bak 's/foo/linux/g' file.txt

ls

file.txt file.txt.bak

پنراورتی تلاش کریں اور تبدیل کریں

بعض اوقات آپ اسٹرنگ والی فائلوں کے لئے تکرار سے ڈائریکٹریز تلاش کرنا چاہتے ہیں اور ساری فائلوں میں اسٹرنگ کو تبدیل کرنا چاہتے ہیں۔ یہ ڈائریکٹری میں فائلوں کو بار بار تلاش کرنے کے grep یا grep جیسے کمانڈز کا استعمال کرکے اور فائلوں کے نام پائپ کرنے کے ذریعہ کیا جاسکتا ہے۔

مندرجہ ذیل کمانڈ موجودہ ورکنگ ڈائرکٹری میں فائلوں کو بار بار تلاش کرے گی اور فائل کے ناموں کو sed منتقل کرے گی۔

find. -type f -exec sed -i 's/foo/bar/g' {} +

ان فائلوں کے ناموں میں جگہ رکھنے والے امور سے بچنے کے -print0 پرنٹ 0 آپشن کا استعمال کریں جو فائل کے نام کو پرنٹ کرنے کا -print0 ہے ، اس کے بعد ایک -print0 کردار اور اس کے بعد آؤٹ پٹ کو xargs -0 کا استعمال کرتے ہوئے پائپ کرنے کے لئے تیار کرتا ہے۔

find. -type f -print0 | xargs -0 sed -i 's/foo/bar/g'

کسی ڈائرکٹری کو خارج کرنے کے لئے -not -path آپشن کا استعمال کریں۔ مثال کے طور پر ، اگر آپ ڈاٹ ( . ) سے شروع ہونے والی تمام فائلوں کو خارج کرنے کے لئے اپنے مقامی گٹ ریپو میں اسٹرنگ کی جگہ لے رہے ہیں تو ، استعمال کریں:

find. -type f -not -path '*/\.*' -print0 | xargs -0 sed -i 's/foo/bar/g'

find. -type f -name "*.md" -print0 | xargs -0 sed -i 's/foo/bar/g'

دوسرا آپشن یہ ہے کہ سرچ پیٹرن پر مشتمل تمام فائلوں کو بار بار تلاش کرنے کے لئے grep کمانڈ کا استعمال کریں اور پھر فائل ناموں کو پائپ کرنے کے لئے پائپ کریں:

grep -rlZ 'foo'. | xargs -0 sed -i.bak 's/foo/bar/g'

نتیجہ اخذ کرنا

اگرچہ یہ پیچیدہ اور پیچیدہ معلوم ہوسکتا ہے ، پہلے تو ، فائلوں میں متن کو sed ساتھ تلاش کرنا اور اس کی جگہ لینا بہت آسان ہے۔

سیڈ کمانڈز ، آپشن ، اور جھنڈوں کے بارے میں مزید جاننے کے لئے جی این یو سیڈ دستی اور گرائمائر سیڈ ٹیوٹوریل ملاحظہ کریں۔ اگر آپ کے ذہن میں کوئی سوال یا آراء ہیں تو بلا جھجھک کوئی تبصرہ کریں۔

سیڈ ٹرمینل