গ্রেপ ইন স্টার সাইন ব্যবহার করে


89

আমি লিনাক্স / ব্যাশের একটি নির্দিষ্ট ফাইলে "abc" সাবস্ট্রিংয়ের সন্ধান করার চেষ্টা করছি

সুতরাং আমি করি:

grep '*abc*' myFile

এটি কিছুই দেয় না।

তবে আমি যদি:

grep 'abc' myFile

এটি সঠিকভাবে ম্যাচ ফেরায়।

এখন, এটি আমার পক্ষে সমস্যা নয়। তবে আমি যদি আরও জটিল স্ট্রিংয়ের জন্য গ্রেপ করতে চাই, তবে বলুন

*abc * def *

গ্রিপ ব্যবহার করে কীভাবে এটি সম্পাদন করব?


4
গ্রেপ নিজেই বেশিরভাগ প্ল্যাটফর্মে ওয়াইল্ডকার্ড সমর্থন করে না। ওয়াইল্ডকার্ডগুলি ব্যবহার করতে আপনাকে egrep ব্যবহার করতে হবে। শাঁসের আলাদা সিনট্যাক্স থাকে। শেলের মধ্যে "*" হ'ল <যেকোন স্ট্রিং>। উদাহরণস্বরূপ এটি একটি অপারেটর যা "পূর্ববর্তী সত্তার অনেকের কাছে 0" বলে। গ্রেপ এ, এটি কেবল একটি নিয়মিত চরিত্র।
প্যানক্রিট

@ প্যানক্রিট: গ্রেপ এবং এগ্রিপ *একই অর্থ: এটি একটি কোয়ান্টিফায়ার যার অর্থ শূণ্য বা পূর্ববর্তী পরমাণুর আরও বেশি। এটি শেলের দ্বারা ব্যবহৃত ওয়াইল্ডকার্ডের চেয়ে সম্পূর্ণ আলাদা ধারণা ।
অ্যালান মুর

উত্তর:


124

তারকাচিহ্নটি কেবল একটি পুনরাবৃত্তি অপারেটর , তবে আপনি কী পুনরাবৃত্তি করবেন তা আপনাকে জানাতে হবে। /*abc*/আব এবং শূন্য বা আরও বেশি গ এর সাথে যুক্ত একটি স্ট্রিংয়ের সাথে মেলে (কারণ দ্বিতীয় * সি-তে রয়েছে; প্রথম অর্থহীন কারণ এর পুনরাবৃত্তি করার জন্য কিছুই নেই)। আপনি যদি কোনও কিছুর সাথে মিল রাখতে চান তবে আপনাকে বলতে হবে .*- ডট মানে কোনও চরিত্র ( নির্দিষ্ট নির্দেশাবলীর মধ্যে )। আপনি যদি কেবল এবিসি সাথে মিল রাখতে চান তবে আপনি কেবল বলতে পারেন grep 'abc' myFile। আপনার আরও জটিল মিলের জন্য, আপনাকে ব্যবহার করতে হবে .*- grep 'abc.*def' myFileএমন স্ট্রিংয়ের সাথে মেলে যা আবেকে অন্তর্ভুক্ত defচ্ছিকভাবে কিছু দিয়ে ডিফ থাকে।

একটি মন্তব্যের ভিত্তিতে আপডেট করুন:

*নিয়মিত এক্সপ্রেশনতে কনসোলে * ঠিক তেমন হয় না। কনসোলে, * একটি গ্লোব কনস্ট্রাক্টের অংশ , এবং কেবল ওয়াইল্ডকার্ড হিসাবে কাজ করে (উদাহরণস্বরূপ ls *.log.log এ শেষ হওয়া সমস্ত ফাইলের তালিকা দেওয়া হবে)। তবে, নিয়মিত অভিব্যক্তিগুলিতে, * একটি সংশোধক, যার অর্থ এটি কেবল তার আগে থাকা চরিত্র বা গোষ্ঠীর ক্ষেত্রে প্রযোজ্য। যদি আপনি * নিয়মিত অভিব্যক্তিগুলিতে ওয়াইল্ডকার্ড হিসাবে কাজ করতে চান তবে আপনাকে .*পূর্বের উল্লিখিত হিসাবে ব্যবহার করতে হবে - ডটটি একটি ওয়াইল্ডকার্ড চরিত্র এবং নক্ষত্রটি সংশোধন করার সময় একটি বা একাধিক বিন্দুর সন্ধান করুন; অর্থাত্ এক বা একাধিক কোনও চরিত্র সন্ধান করুন।


4
আমি মনে করি প্রশ্নকর্তা শেল ওয়াইল্ডকার্ড এবং নিয়মিত প্রকাশের মধ্যে পার্থক্য সম্পর্কে বিভ্রান্ত হয়ে পড়েছেন। আমি আরও সন্দেহ করি যে আরও জটিল অভিব্যক্তিটি হবে: গ্রেপ 'অ্যাবিসি। * ডিএফ' (কমপক্ষে একটি স্থান উপস্থিত - সম্ভবত আমি দুটি লিখেছি)।
জোনাথন লেফলার 14

4
প্রকৃতপক্ষে, প্রশ্নকর্তাকে বোঝা যাচ্ছে না যে 'abc' '' abc $ 'এর মতো নয় :
ম্যাসা

4
হ্যাঁ, আমি গ্লোব এবং সম্পূর্ণ নিয়মিত প্রকাশের মধ্যে বিভ্রান্ত হয়ে পড়েছিলাম। আমি শেলটির সাথে কোনও কিছুর সাথে মেলে অর্থ বিন্দুবিহীন * ব্যবহার করি।
সাওবি

4
গ্রেপ *মানে "0 বা তার বেশি" এবং গ্রেপ ডিফল্টরূপে লোভী is লক্ষ্য করুন, grep মধ্যে মৌলিক রেগুলার এক্সপ্রেশনের metacharacters ?, +, {, |, (, এবং )তাদের বিশেষ অর্থ হারান। আরও তথ্য: গ্রেপ রিজেক্সপস
ক্রিসওয়েবদেভ

25

ডট অক্ষর অর্থ কোনও বর্ণের সাথে মেলে, তাই .*শূন্য বা কোনও বর্ণের আরও উপস্থিতি। আপনি সম্ভবত ন্যায়বিচার .*চেয়ে ব্যবহার করতে চান *


বিন্দু এমন একটি মেটা চরিত্র যা নতুন রেখাগুলি ব্যতীত অন্য কোনও অক্ষর গ্রহণ করে
অভিষেক কমল

12

"তারার চিহ্ন" এর সামনে যদি কিছু থাকে তবে তা অর্থপূর্ণ। যদি সরঞ্জাম না থাকে (এই ক্ষেত্রে গ্রেপ) কেবল এটিকে একটি ত্রুটি হিসাবে বিবেচনা করতে পারে। উদাহরণ স্বরূপ:

'*xyz'    is meaningless
'a*xyz'   means zero or more occurrences of 'a' followed by xyz

4
* অর্থহীন নয়; এর কেবল অর্থ (পুনরাবৃত্তির) অর্থ নেই তবে এর অর্থ "আমি একটি তারা"। এটি x, y এবং z এর পরে একটি তারাযুক্ত একটি রেখার সাথে মেলে।
জোনাথন লেফলার 14

4
@ জোনাথন এটি সরঞ্জামের উপর নির্ভর করে।


6

আপনি যে এক্সপ্রেশনটি চেষ্টা করেছেন, যেমন লিনাক্সের শেল কমান্ড লাইনে কাজ করে তাদেরকে " গ্লোব " বলা হয় । গ্লোব এক্সপ্রেশন সম্পূর্ণ নিয়মিত এক্সপ্রেশন নয় , যা গ্রাইপটি স্ট্রিংগুলি সুনির্দিষ্ট করতে ব্যবহার করে। পার্থক্য সম্পর্কে এখানে (পুরানো, ছোট) পোস্ট is গ্লোব এক্সপ্রেশন ("ls *" হিসাবে) নিজেই শেল দ্বারা ব্যাখ্যা করা হয়।

গ্লোব থেকে আরইএস এ অনুবাদ করা সম্ভব, তবে আপনার সাধারণত এটি আপনার মাথায় করা দরকার।


4
এটি শেল দিয়ে পার্স করা হলে এটি কেবল একটি গ্লোব। যেহেতু তিনি একক উদ্ধৃতিগুলির মধ্যে অনুসন্ধানের স্ট্রিংটি সংরক্ষণ করছেন, শেলটি স্ট্রিংটি একা ফেলে দেয় এবং এটি অক্ষত অবস্থায় অক্ষরেখা থেকে গ্রেপ পর্যন্ত চলে যায়।
সুস্পষ্ট সংকলক

4

আপনি নিয়মিত এক্সপ্রেশন ব্যবহার করছেন না, তাই আপনার পছন্দের গ্রেপ বৈকল্পিক হওয়া উচিত fgrep, এটি আপনার প্রত্যাশা অনুযায়ী আচরণ করবে।


4
fgrepএখন অবচয় করা হয়েছে, grep -fপরিবর্তে ব্যবহার করা উচিত।
প্রমিথিউস

4
এটি "গ্রেপ-এফ"। গুড ওল fgrep "অবচিত" হতে পারে তবে আমি বেঁচে থাকতে তারা এটিকে নেবে না।
অ্যান্ড্রু বিয়ালস


1

আপনি যে উত্তরটি সন্ধান করছেন এটি এটিই হতে পারে:

grep abc MyFile | grep def

কেবলমাত্র জিনিসটি ... এটি আউটপুট লাইনগুলি "ডিএফ" এর আগে বা "এবিসি" এর পরে ছিল


1

এটি আমার পক্ষে কাজ করেছে:

গ্রেপ "। * $ r এক্সপ্রেস}" - ডট-এর পূর্বে ডাবল-কোটস সহ। যেখানে "এক্সপ্রেস" হ'ল লাইনের শেষে আপনার যা কিছু স্ট্রিং দরকার।

স্ট্যান্ডার্ড ইউনিক্স গ্রেপ ডাব্লু / অতিরিক্ত স্যুইচগুলি।


0

'*' পূর্ববর্তী আইটেমটির পরিবর্তক হিসাবে কাজ করে। সুতরাং 'এবিসি * ডিএফ' 'আব' অনুসন্ধান করে তারপরে 0 বা তার বেশি 'সি' ডিফ দ্বারা অনুসরণ করবে।

আপনি সম্ভবত যা চান তা হ'ল 'অ্যাবিসি। * ডিএফ' যা 'এবিসি' এর জন্য অনুসন্ধান করে তারপরে যে কোনও সংখ্যক অক্ষর, 'ডিফ' দ্বারা অনুসরণ করা হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.