উত্তর:
আপনি এটি গ্রেপের বিকল্প হিসাবে -v(এর জন্য --invert-match) বিকল্পটি ব্যবহার করে করতে পারেন :
grep -v "unwanted_word" file | grep XXXXXXXX
grep -v "unwanted_word" fileরয়েছে এমন রেখাগুলি ফিল্টার করবে unwanted_wordএবং grep XXXXXXXXকেবল প্যাটার্নের সাথে রেখা তালিকাবদ্ধ করবে XXXXXXXX।
সম্পাদনা করুন:
আপনার মন্তব্য থেকে দেখে মনে হচ্ছে আপনি এটি ছাড়াই সমস্ত লাইন তালিকাভুক্ত করতে চান unwanted_word। সেক্ষেত্রে আপনার যা প্রয়োজন তা হ'ল:
grep -v 'unwanted_word' file
-v 'unwanted_word' --after Nসাহায্য করে না কারণ এটি পরে লাইন এবং এন লাইনগুলিকে অন্তর্ভুক্ত করে।
-vবা --invert-matchমিল না-করা লাইনগুলি নির্বাচন করুন। আপনার ক্ষেত্রে grep -v 'unwanted_word' fileবা grep --invert-match 'unwanted_word' file।
git status -s |grep -v "folder_I_dont_care"
sun, যখন এটি ছাড়া sunrise, grep sun|grep -v sunriseলাইন উভয় ধারণ অগ্রাহ্য sunএবং sunriseএকযোগে যে আমি কি চাই না। grep -P 'sun(?!rise)'অনেক ভাল।
আমি "আমি কীভাবে কোনও শব্দের সাথে মেলে তবে অন্যটিকে বাদ দিই" হিসাবে এই প্রশ্নটি বুঝতে পেরেছিলাম, যার জন্য একটি সমাধান সিরিজের দুটি গ্রেপ: প্রথম গ্রেপ "ওয়ার্ড 2" বাদে "গ্রেড ওয়ার্ড 1", দ্বিতীয় গ্রেপকে খুঁজে পেয়েছিল:
grep "word1" | grep -v "word2"
আমার ক্ষেত্রে: আমাকে "প্লট" এবং "# প্লট" এর মধ্যে পার্থক্য করা দরকার যা গ্রেপের "শব্দ" বিকল্পটি ব্যবহার করবে না ("#" বর্ণানুক্রমিক না হয়ে)।
আশাকরি এটা সাহায্য করবে.
word1।
যদি আপনার grepপার্ল নিয়মিত মত প্রকাশের -Pবিকল্পটি সমর্থন করে তবে আপনি করতে পারেন (যদি বাশ; টিসিএসএস হলে আপনাকে এড়াতে হবে !):
grep -P '(?!.*unwanted_word)keyword' file
ডেমো:
$ cat file
foo1
foo2
foo3
foo4
bar
baz
আমাদের এখন fooবাদে সমস্ত তালিকাfoo3
$ grep -P '(?!.*foo3)foo' file
foo1
foo2
foo4
$
grep -v -Pনিয়মিত অভিব্যক্তিতে অবহেলা ছাড়াই কাজ করে।
!" । আপনাকে ধন্যবাদ, আপনাকে ধন্যবাদ আপনাকে ধন্যবাদ! এটাই আমি চেয়েছিলাম!
সঠিক সমাধানটি grep -v "word" fileএর awkসমতুল্য সহ ব্যবহার করা :
awk '!/word/' file
তবে, যদি আপনার আরও জটিল পরিস্থিতি ঘটে থাকে যেখানে আপনি চান, বলুন, XXXউপস্থিত হন এবং উপস্থিত YYY না হন, তবে awkবেশ কয়েকটি grepএস পাইপ না দিয়ে চলে আসে :
awk '/XXX/ && !/YYY/' file
# ^^^^^ ^^^^^^
# I want it |
# I don't want it
আপনি আরও জটিল কিছু বলতে পারেন। উদাহরণস্বরূপ: আমি সেই লাইনগুলি দুটি XXXবা একটি সহ চাই YYY, তবে চাই না ZZZ:
awk '(/XXX/ || /YYY/) && !/ZZZ/' file
প্রভৃতি
grep -Pবড় ফাইলগুলির সমাধানের চেয়ে অনেক দ্রুত গতিযুক্ত বলে মনে হয় ।
grep -Pমানে পার্ল রিজেক্সপ ব্যবহার করা, সুতরাং সেই প্যাকেজটি লোড করা স্বাভাবিকের চেয়ে ব্যয়বহুল হতে চলেছে grep।
গ্রেপ নন-মিলনকারী লাইনগুলি নির্বাচন করতে '-v' বা '--invers-ম্যাচ' বিকল্প সরবরাহ করে।
যেমন
grep -v 'unwanted_pattern' file_name
এটি ফাইল ফাইল নাম থেকে সমস্ত লাইন আউটপুট দেবে, যার 'অযাচিত_প্যাটার্ন' নেই।
যদি আপনি কোনও ফোল্ডারের অভ্যন্তরে একাধিক ফাইলে প্যাটার্নটি সন্ধান করে থাকেন তবে আপনি নিম্নলিখিত হিসাবে পুনরাবৃত্ত অনুসন্ধান বিকল্পটি ব্যবহার করতে পারেন
grep -r 'wanted_pattern' * | grep -v 'unwanted_pattern'
এখানে গ্রেপ বর্তমান ডিরেক্টরি থেকে সমস্ত ফাইলের মধ্যে 'ওয়ান্ট_প্যাটার্ন' এর সমস্ত উপস্থিতি তালিকাভুক্ত করার চেষ্টা করবে এবং 'অযাচিত_প্যাটার্ন' ফিল্টার করার জন্য এটি দ্বিতীয় গ্রেপ-এ পাস করবে। '|' - পাইপ শেলকে বাম প্রোগ্রামের স্ট্যান্ডার্ড আউটপুট (গ্রেপ -আর 'ওয়ান্ড_প্যাটার্ন' *) সাথে ডান প্রোগ্রামের মান ইনপুট (গ্রেপ-ভি 'অবাঞ্ছিত_প্যাটার্ন') এর সাথে সংযোগ করতে বলবে।
আমার কাছে একগুচ্ছ ফাইলের ডিরেক্টরি রয়েছে। "স্পিডআপ" স্ট্রিং না থাকা সমস্ত ফাইল আমি সন্ধান করতে চাই তাই আমি নিম্নলিখিত কমান্ডটি সফলভাবে ব্যবহার করেছি:
grep -iL speedup *
grep -Rv "word_to_be_ignored" . | grep "word_to_be_searched"