*
একটি বিশেষ একটি শেল উভয় অর্থ globbing চরিত্র ( "ওয়াইল্ডকার্ড") এবং একটি রেগুলার এক্সপ্রেশন হিসাবে metacharacter । আপনাকে অবশ্যই উভয়কে বিবেচনায় নিতে হবে, যদিও আপনি যদি আপনার নিয়মিত অভিব্যক্তিটি উদ্ধৃত করেন তবে আপনি শেলটিকে বিশেষভাবে চিকিত্সা করা থেকে আটকাতে পারবেন এবং এটি এটি অপরিবর্তিত রয়েছে কিনা তা নিশ্চিত করতে পারেন grep
। যদিও ধারণা অনুসারে ধরণের অনুরূপ, *
শেলটির অর্থ কী তা বোঝায় তার থেকে একেবারে আলাদা grep
।
প্রথমে শেলটি *
একটি ওয়াইল্ডকার্ড হিসাবে আচরণ করে ।
তুমি বলেছিলে:
উদ্ধৃতিতে অভিব্যক্তিটি আবদ্ধ কিনা তা কোনও পার্থক্য করে না।
কমান্ডটি চালানোর সময় আপনি যে ডিরেক্টরিতে যা ঘটছেন তাতে কোন ফাইল বিদ্যমান তা তার উপর নির্ভর করে। ডিরেক্টরি বিভাজক ধারণ করে এমন নিদর্শনগুলির জন্য /
এটি আপনার পুরো সিস্টেম জুড়ে কী ফাইল বিদ্যমান তা নির্ভর করে। আপনার সর্বদা - এবং একক উদ্ধৃতিগুলির জন্য নিয়মিত প্রকাশগুলি উদ্ধৃত করা উচিত - যদি না আপনি নিশ্চিত হন যে আপনি নয় ধরণের সম্ভাব্য বিস্ময়কর রূপান্তরগুলি শেল অন্যথায় কমান্ডটি কার্যকর করার আগে সম্পাদন করেন ।grep
grep
শেলটি *
এমন কোনও অক্ষরের মুখোমুখি হয় যা উদ্ধৃত হয়নি , এটি "শূন্য বা অন্য কোনও চরিত্রের" অর্থ বোঝায় এবং সেই শব্দের পরিবর্তে ফাইলের নামের সাথে এটি যুক্ত করে যা প্যাটার্নের সাথে মেলে। (ফাইলগুলির নাম যে দিয়ে শুরু .
বাদ দেওয়া হয় - আপনার প্যাটার্ন যদি না নিজেই দিয়ে শুরু হয় .
বা । আপনার শেল কনফিগার করেছেন তাদের যাহাই হউক না কেন অন্তর্ভুক্ত করা) এই হিসাবে পরিচিত হয় globbing --and এছাড়াও নাম দ্বারা ফাইলের নাম সম্প্রসারণ এবং পথনাম সম্প্রসারণ ।
এর সাথে grep
সাধারণত এই প্রভাবটি আসবে যে প্রথম মিলের ফাইলের নামটি নিয়মিত প্রকাশ হিসাবে গ্রহণ করা হয় - এমনকি এটি যদি কোনও মানব পাঠকের কাছে একেবারেই স্পষ্ট হয় যে এটি নিয়মিত প্রকাশ হিসাবে বোঝানো হয়নি - অন্য সমস্ত ফাইলের নামগুলি স্বয়ংক্রিয়ভাবে আপনার তালিকাভুক্ত হয়ে গেছে গ্লোবকে ম্যাচের জন্য অনুসন্ধান করতে ফাইলগুলির ভিতরে নেওয়া হয় । (আপনি তালিকাটি দেখতে পাচ্ছেন না - এটি স্পষ্টতই পাস করা হয়েছে grep
)) আপনি কার্যত কখনই এটি চান না।
এটি কখনও কখনও কোনও সমস্যা না হওয়ার কারণ - এবং আপনার বিশেষ ক্ষেত্রে, কমপক্ষে এখনও পর্যন্ত , এটি ছিল না - এটি নীচের সমস্ত কিছু সত্য হলে*
একা হয়ে যাবে :
যার নাম মেলে এমন কোনও ফাইল নেই । ... অথবা আপনি নিজের শেলটিতে গ্লোব্বিং অক্ষম করেছেন, সাধারণত set -f
বা সমতুল্য set -o noglob
। তবে এটি অস্বাভাবিক এবং আপনি সম্ভবত জানেন যে আপনি এটি করেছেন।
আপনি কোনও শেল ব্যবহার করছেন যার ডিফল্ট আচরণটি *
কোনও মিল নেই যখন কোনও ফাইলের নাম নেই alone বাশের ক্ষেত্রে এটি সম্ভবত আপনি ব্যবহার করছেন তবে বোর্ন-স্টাইলের সমস্ত শেল নয় in (উদাহরণস্বরূপ, জনপ্রিয় শেল জেডসে ডিফল্ট আচরণ গ্লোবগুলির জন্য হয় (ক) প্রসারিত করা বা (খ) একটি ত্রুটি তৈরি করা ) ) ... বা আপনি নিজের শেলের এই আচরণটি পরিবর্তন করেছেন - এটি কীভাবে হয় তারতম্য হয় শাঁস জুড়ে
যদি না থাকে অন্যথায় globs সঙ্গে প্রতিস্থাপন করা দেওয়ার অনুমোদন চেয়ে আপনার শেল বলেন কিছুই আছে যখন আপনার সাথে মেলে এমন ফাইল, কিংবা এই অবস্থায় একটি ত্রুটির বার্তা সঙ্গে ব্যর্থ। বাশে এটি যথাক্রমে nullglob
বা failglob
শেল বিকল্পটি সক্ষম করেই করা হত ।
আপনি কখনও কখনও # 2 এবং # 3 উপর নির্ভর করতে পারেন তবে আপনি খুব কমই # 1 উপর নির্ভর করতে পারেন। grep
এখন কাজ করে এমন একটি অব্যর্থিত প্যাটার্নযুক্ত একটি কমান্ড আপনার আলাদা ফাইল থাকতে পারে বা আপনি এটি অন্য কোনও জায়গা থেকে চালানোর সময় কাজ করা বন্ধ করে দিতে পারে। আপনার নিয়মিত অভিব্যক্তিটি উদ্ধৃত করুন এবং সমস্যাটি চলে যায়।
তারপরgrep
কমান্ড একইরূপে *
একটি কোয়ান্টিফায়ার হিসাবে।
অন্যান্য উত্তর - যেমন যারা Sergiy Kolodyazhnyy দ্বারা এবং কস দ্বারা কিছুটা ভিন্ন উপায়ে এই প্রশ্নের এই দৃষ্টিভঙ্গির --also ঠিকানা। সুতরাং আমি যারা এখনও এগুলি পড়েনি এখনও তাদের উত্তরটি পড়ার আগে বা পরে তা করার জন্য উত্সাহিত করছি।
ধরে নেওয়া যাক *
এটা grep করতে নেই - যা উদ্ধৃত ensure-- উচিত grep
তারপর, এটা মানে লাগে যে আইটেম আগে বসেছে সময়ের কোন সংখ্যা ঘটতে পারে বরং ঠিক একবার ঘটতে থাকার চেয়ে । এটি এখনও একবার হতে পারে। অথবা এটি সম্ভবত উপস্থিত নাও হতে পারে। বা এটি পুনরাবৃত্তি হতে পারে। পাঠ্য যে সঙ্গে তড়কা কোনো ঐ সম্ভাবনার সাথে মিলে যাবে।
আমি "আইটেম" বলতে কী বোঝাতে চাই?
একক চরিত্র । যেহেতু b
ম্যাচ একটি আক্ষরিক b
, b*
মিলে যায় শূন্য বা তার বেশি b
গুলি, এইভাবে ab*c
সাথে মিলে যায় ac
, abc
, abbc
, abbbc
, ইত্যাদি
একইভাবে, যেহেতু .
মেলা যেকোনো চরিত্র , .*
শূন্য বা তার বেশি অক্ষরের সাথে মেলে 1 , এইভাবে a.*c
ম্যাচ ac
, akc
, ahjglhdfjkdlgjdfkshlgc
, এমনকি acccccchjckhcc
, ইত্যাদি অথবা
একটি চরিত্র শ্রেণি । যেহেতু [xy]
ম্যাচ x
বা y
, [xy]*
ম্যাচ বা তার বেশি অক্ষরের শূন্য যেখানে প্রতিটি এক হয় হয় x
বা y
, এইভাবে p[xy]*q
সাথে মিলে যায় pq
, pxq
, pyq
, pxxq
, pxyq
, pyxq
, pyyq
, pxxxq
, pxxyq
, ইত্যাদি
এই ক্ষেত্রে প্রযোজ্য ফরম সাধারণভাবে সংক্ষেপে মত চরিত্র ক্লাস \w
, \W
, \s
, এবং \S
। যেহেতু যে \w
কোনও শব্দের চরিত্রের সাথে \w*
মেলে, শূন্য বা আরও শব্দের অক্ষরের সাথে মেলে। অথবা
একটি দল । যেহেতু \(bar\)
ম্যাচ bar
, \(bar\)*
ম্যাচ শূন্য বা তার বেশি bar
গুলি, এইভাবে foo\(bar\)*baz
সাথে মিলে যায় foobaz
, foobarbaz
, foobarbarbaz
, foobarbarbarbaz
, ইত্যাদি
সঙ্গে -E
বা -P
বিকল্প, grep
একটি হিসাবে আপনার রেগুলার এক্সপ্রেশন একইরূপে ere বা PCRE যথাক্রমে বরং একটি হিসাবে চেয়ে BRE , এবং তারপর গ্রুপ দ্বারা বেষ্টিত করা হয় (
)
পরিবর্তে \(
\)
, তাই তারপর আপনি ব্যবহার করতে চাই (bar)
পরিবর্তে \(bar\)
এবং foo(bar)baz
পরিবর্তে foo\(bar\)baz
।
man grep
শেষে BRE এবং ERE সিনট্যাক্সের যুক্তিসঙ্গতভাবে অ্যাক্সেসযোগ্য ব্যাখ্যা দেয়, পাশাপাশি grep
শুরুতে সমস্ত কমান্ড-লাইন বিকল্প গ্রহণ করে এমন তালিকা তৈরি করে। আমি সেই ম্যানুয়াল পৃষ্ঠাটিকে একটি উত্স হিসাবে, এবং জিএনইউ গ্রেপ ডকুমেন্টেশন এবং এই টিউটোরিয়াল / রেফারেন্স সাইটটি (যা আমি উপরের পৃষ্ঠাগুলির সাথে সংযুক্ত করেছি) সুপারিশ করি।
পরীক্ষা এবং শেখার জন্য grep
, আমি এটি একটি প্যাটার্ন দিয়ে কল করার প্রস্তাব দিচ্ছি তবে কোনও ফাইল নাম নেই। তারপরে এটি আপনার টার্মিনাল থেকে ইনপুট নেয়। লাইন প্রবেশ করান; আপনার কাছে যে রেখাগুলি প্রতিধ্বনিত হয় সেগুলি হ'ল সেই পাঠ্য যা আপনার প্যাটার্নটি মেলে। প্রস্থান করতে, একটি লাইনের শুরুতে Ctrl+ টিপুন D, যা ইনপুটটির শেষের ইঙ্গিত দেয়। (অথবা আপনি বেশিরভাগ কমান্ড-লাইন প্রোগ্রামের মতো Ctrl+ টিপতে পারেন C)) উদাহরণস্বরূপ:
grep 'This.*String'
আপনি যদি --color
পতাকাটি ব্যবহার করেন , আপনার রেখার grep
নির্দিষ্ট অংশগুলিকে হাইলাইট করবে যা আপনার নিয়মিত অভিব্যক্তির সাথে মিলে যায়, যা নিয়মিত অভিব্যক্তিটি কী করে তা নির্ধারণ করার জন্য এবং একবার আপনি কী সন্ধান করছেন তা সন্ধানের জন্য উভয়ই কার্যকর। ডিফল্টরূপে, উবুন্টু ব্যবহারকারীদের একটি বাশ ওরফে রয়েছে grep --color=auto
যা চালানোর কারণ হয় - যা আপনি যখন grep
কমান্ড লাইন থেকে দৌড়ান - তখন এই উদ্দেশ্যে যথেষ্ট , তাই আপনাকে সম্ভবত --color
ম্যানুয়ালিও পাস করার প্রয়োজন হবে না ।
1 সুতরাং .*
একটি নিয়মিত প্রকাশে *
শেল গ্লোব বলতে কী বোঝায়। যাইহোক, পার্থক্যটি হ'ল grep
স্বয়ংক্রিয়ভাবে লাইনগুলি মুদ্রণ করে যেগুলিতে সেগুলির যে কোনও জায়গায় আপনার মিল রয়েছে , তাই এটি .*
নিয়মিত প্রকাশের শুরুতে বা শেষে হওয়া সাধারণত অপ্রয়োজনীয় ।
* != any number of unknown characters
ডকটি পড়ুন