গ্রেপ-এ "* .পিএল" এবং * .পিএল এর মধ্যে পার্থক্য কী? কেন উদ্ধৃতি ফলাফল পরিবর্তন করে?


10

পার্থক্য কি:
grep "string" . -r --include *.pl

এবং

grep "string" . -r --include "*.pl"

পরেরটি সাব-ডাইরেক্টরেটে ফাইলগুলিকে অন্তর্ভুক্ত করে যা পূর্বের নয়। কেন?


পার্থক্য নেই grep; এটা শেল মধ্যে। grepউদ্ধৃতি কখনও দেখেনা।
ওয়াইল্ডকার্ড

উত্তর:


17

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

উদ্ধৃতিতে স্থাপন করা হলে তারাটি শেল দ্বারা ব্যাখ্যা করা যাবে না এবং ভার্বাটিম কমান্ডকে দেওয়া হবে।


উদাহরণ ব্যাখ্যা। উদ্ধৃত এক:

grep "string" . -r --include "*.pl"

এখানে যুক্তি সহ grepবিকল্পটি পাবেন । এটি প্রথম চরিত্র হিসাবে চরিত্রের সাথে 4 টি চরিত্রের স্ট্রিং । এই স্ট্রিং দিয়ে কী করে তা সম্পূর্ণরূপে । এই ক্ষেত্রে উপায়ে শুধুমাত্র নকশার সাথে মেলে এমন ফাইল বিবেচনা করতে ।--include*.pl*grepgrep--include*.pl

পর্দার পিছনে আফাইক Gnu গ্র্যাপ একই প্যাটার্ন মেলানো লিবকে gnu বাশ হিসাবে ব্যবহার করে।

উদ্ধৃত এক:

grep "string" . -r --include *.pl

এখানে শেলটি প্রথমে *.plশেষ হওয়া সমস্ত ফাইলনামে প্যাটার্নটি প্রসারিত করবে .pl। ধরুন ফাইল আছে foo.pl, bar.plএবং baz.pl। কমান্ড লাইনটি প্রসারিত করার পরে দেখে মনে হচ্ছে:

grep "string" . -r --include foo.pl bar.pl baz.pl

এখানে আর্গুমেন্টের grepসাহায্যে বিকল্পটি প্রাপ্ত হবে এবং তারপরে অপশনগুলি এবং । অর্থ কেবল প্যাটার্নের সাথে মিলে যাওয়া ফাইলগুলি বিবেচনা করা । যেহেতু প্যাটার্নে কোনও ওয়াইল্ডকার্ড নেই কেবলমাত্র ফাইলের সাথে মিলে যা ফাইলটির নাম হবে ।--includefoo.plbar.plbaz.pl--include foo.plfoo.plfoo.pl

অপশন bar.plএবং baz.plমানে গ্রেপ এই ফাইলগুলিতেও অনুসন্ধান করবে, তবে যেহেতু তারা প্যাটার্নটির সাথে মেলে না তাই তারা foo.plএড়ানো হবে।


এটি একটি দুর্দান্ত পর্যবেক্ষণ। আমি সবসময় ভাবতাম কেন grep -rবেমানান বলে মনে হয়েছিল তবে কখনই লক্ষ্য করিনি এটি কেবল যখন আমি ব্যবহার করেছি *
j883376

6

পার্থক্যটি হ'ল যদি আপনি প্যাটার্নটি উদ্ধৃতি করেন না ( *.pl) এটি শেল দ্বারা প্রসারিত হয়। উদাহরণস্বরূপ, আপনি যদি grepএমন কোনও ডিরেক্টরিতে চালিত হন যা একটি ফাইল নামে পরিচিত থাকে foo.pl, যেহেতু *plশেলটি দ্বারা প্রসারিত হয়, grepআসলে কী তা দেখায়:

grep "string" . -r --include foo.pl

যেহেতু আপনি এটিকে কেবল অন্তর্ভুক্ত করতে বলছেন এটি কেবলমাত্র foo.plএকটি ফাইলের মধ্যে অনুসন্ধান করবে।

আপনি যদি আপনার প্যাটার্নটি উদ্ধৃত করেন, শেলটি এটি প্রসারিত করবে না এবং grepসঠিক আদেশ পাবে, যথা ly

 grep "string" . -r --include *pl

peoplদ্বারা প্রসারিত হবে না *.pl
আনটনাট

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