গ্রেপ কাজ করে কীভাবে এটি [টি] রিকি বন্ধনী প্রকাশ করে?


38

আমি এই ওয়ান-লাইনারটি সম্প্রতি দেখেছি:

$ ps -ef | grep [f]irefox 

thorsen   16730     1  1 Jun19 ?        00:27:27 /usr/lib/firefox/firefox ...

সুতরাং ডেটাতে "ফায়ারফক্স" সহ প্রক্রিয়াগুলির তালিকাটি ফিরে আসবে বলে মনে হচ্ছে তবে গ্রেপ প্রক্রিয়াটি নিজেই রেখে গেছে, এবং সুতরাং এটি প্রায় সমতুল্য বলে মনে হচ্ছে:

ps -ef |grep -v grep| grep firefox

যদিও এটি কাজ করে আমি বুঝতে পারি না। আমি গ্রিপ এবং অন্য কোথাও ম্যান পেজটি দেখেছি কিন্তু এর ব্যাখ্যা খুঁজে পাইনি।

এবং আমি চালিয়ে গেলে রহস্যটিকে আরও বাড়িয়ে তুলতে:

$ ps -ef | grep firefox  > data
$ grep [f]irefox data

thorsen   15820 28618  0 07:28 pts/1    00:00:00 grep --color=auto firefox
thorsen   16730     1  1 Jun19 ?        00:27:45 /usr/lib/firefox/firefox ....

[টি] রিক মনে হচ্ছে কাজ করা বন্ধ করে দিয়েছে!

এখানে কেউ জানতে পারবে কি হচ্ছে আমি নিশ্চিত।

ধন্যবাদ।


হুম, আপনি কি নিশ্চিত যে এটি সঠিক? পিএস -ইএফ | গ্রেপ [এফএফ] আয়রফক্স আরও বোধগম্য হবে। এটি দেখতে নিয়মিত প্রকাশের মতো এবং এর সাথে বদ্ধ অক্ষরের যে কোনও একটির সাথে এটি মিলবে। পরিসীমা হিসাবেও করা যেতে পারে, যেমন [0-9]
এমবিএস

হ্যাঁ ঠিক. আমার এই সমস্যাটি ছিল: কেবলমাত্র একটি চরিত্রের একটি অক্ষর শ্রেণি অর্থহীন বলে মনে হয়েছিল তবুও এটি একটি "রহস্যময়" পার্শ্ব প্রতিক্রিয়া তৈরি করছে! যাইহোক জোকারডিনো একটি ভাল ব্যাখ্যা সরবরাহ করেছে।
থারসন

উত্তর:


57

বর্গক্ষেত্র বন্ধনী এক্সপ্রেশনটি বাশ শেলের (এবং পাশাপাশি অন্যান্য শাঁস) গ্রেপের চরিত্রের শ্রেণীর প্যাটার্ন মিলছে।

grepপ্রোগ্রাম ডিফল্টরূপে POSIX মৌলিক রেগুলার এক্সপ্রেশনের বুঝতে পারে। এটির সাথে আপনি চরিত্রের ক্লাস নির্ধারণ করতে পারেন। উদাহরণস্বরূপ ps -ef | grep [ab9]irefox"খুঁজে হবে একটি irefox", " irefox", " 9 যদি ঐ অস্তিত্ব irefox", কিন্তু নয় " AB irefox"।

কমান্ডটি grep [a-zA-Z0-9]irefoxএমন সমস্ত প্রক্রিয়া সন্ধান করবে যা ঠিক একটি অক্ষর বা সংখ্যা দিয়ে শুরু হয় এবং "irefox" এ শেষ হয়।

সুতরাং এটিতে ps -ef | grep firefoxলাইন অনুসন্ধান firefoxকরে। যেহেতু গ্রেপ প্রক্রিয়াটিতে স্বয়ং "ফায়ারফক্স" রয়েছে, গ্রেপ এটিও খুঁজে পায়। একটি যুক্ত করে []আমরা কেবল অক্ষরের শ্রেণি "[চ]" অনুসন্ধান করছি (যার মধ্যে কেবল "চ" অক্ষর রয়েছে এবং এটি বন্ধনী ছাড়াই কেবল "চ" এর সমান)। বন্ধনীগুলির সুবিধা এখন হ'ল "ফায়ারফক্স" স্ট্রিংটি আর গ্রেপ কমান্ডে উপস্থিত হবে না। সুতরাং, গ্রেপ নিজেই গ্রেপের ফলাফলটিতে প্রদর্শিত হবে না।

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

আপনি যদি দ্বিতীয় ফলাফলটি ঠিক করতে চান তবে আপনি সেগুলি এইভাবে ব্যবহার করতে পারেন:

ps -ef | grep [f]irefox  > data
grep firefox data

(রেফারেন্স)


1
হুম। আমার কাছে এটি ঘটেনি যে [[] গ্রেপ এমনকি একটি সুযোগ পাবে তার আগে শেল দ্বারা ব্যাখ্যা করা কিছু ছিল। ব্যাখ্যা করার জন্য ধন্যবাদ. সমস্ত [মিঃ] ইটেরি সমাধান করা হয়েছে।
থারসন

সাহায্য করতে পারে খুশি. একটি সুন্দর দিন :) আছে
jokerdino

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

6
আসলে এই ক্ষেত্রে আমি মনে করি না যে এটি গ্রেপের আগে শেল দ্বারা ব্যাখ্যা করা হয়েছে। আমি মনে করি [f]চরিত্রের ক্লাসগুলির জন্য নিয়মিত এক্সপ্রেশন প্যাটার্নের সাথে ম্যাচিং বন্ধনী। "[A-z0-9] এর মতো, আইরেফক্স" গ্রেপ "আইরেফক্স" এবং "0irefox" এর সাথেও মিলবে। আপনি সহজেই দেখতে পাবেন যে এটি কোনও বিল্ট ইন অন্তর্নির্মিত নয় যেহেতু echo $([f])কোনও ত্রুটি প্রদান করে।
কন-এফ-ব্যবহার 14 ই

4
সুনির্দিষ্ট কারণ [f]irefoxএই উদ্দেশ্যে কাজ করে যে এটি শেল দ্বারা প্রসারিত হয় না । শেলটি যখন প্রসারিত [f]irefoxহয় firefox, এটি grepদেখার কারণ হয় firefoxএবং তারপরে কমান্ড স্ট্রিংয়ের firefoxঅংশ grep, ঠিক যেন grep firefoxচালানো হয়। কিন্তু এটা ভাল মনে শেল প্যাটার্ন ম্যাচিং রাখার বিশেষ করে যখন স্ক্রিপ্টিং, কারণ যদি একটি ফাইল বলা হয় firefoxবর্তমান ডিরেক্টরির মধ্যে , তারপর শেল নেই প্রসারিত [f]irefoxকরতেfirefox এবং এই পদ্ধতি ব্যর্থ হয়, অর্থাত, grepথেকে লাইন psদেখানো হয়।
এলিয়াহ কাগন

10

কারণটি স্ট্রিং

grep firefox

প্যাটার্নের সাথে মেলে firefoxতবে স্ট্রিং

grep [f]irefox

প্যাটার্নের সাথে মেলে না [f]irefox(যা প্যাটার্নের সমান firefox)।

এই কারণেই প্রথম গ্রেপ তার নিজস্ব প্রক্রিয়া কমান্ড লাইনের সাথে মেলে, অন্যদিকে না doesn't


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