উত্তর:
আপনি এটি গ্রেপের বিকল্প হিসাবে -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"