regex কিভাবে আমি grep সঙ্গে একটি শব্দ বাদ দিতে পারি?




string search (7)

আমি ভালো কিছু প্রয়োজন:

grep ^"unwanted_word"XXXXXXXX

grep অ-মিলিত লাইন নির্বাচন করতে '-v' বা '--invert-match' বিকল্পটি সরবরাহ করে।

যেমন

grep -v 'unwanted_pattern' file_name

এটি file_name ফাইল থেকে সমস্ত লাইন আউটপুট হবে, যার 'অবাঞ্ছিত_পরিবর্তন' নেই।

যদি আপনি ফোল্ডারের মধ্যে একাধিক ফাইলের প্যাটার্ন অনুসন্ধান করেন, তবে আপনি নিম্নরূপ পুনর্ব্যবহারযোগ্য অনুসন্ধান বিকল্পটি ব্যবহার করতে পারেন

grep -r 'wanted_pattern' * | grep -v 'unwanted_pattern'

এখানে grep বর্তমান ডিরেক্টরি থেকে সকল ফাইলগুলিতে 'wanted_pattern' এর সমস্ত ঘটনা তালিকাভুক্ত করার চেষ্টা করবে এবং 'unwanted_pattern' ফিল্টার করার জন্য এটি দ্বিতীয় grep এ প্রেরণ করবে। '|' - ডান প্রোগ্রামের স্ট্যান্ডার্ড ইনপুট (grep -v 'unwanted_pattern') থেকে বাম প্রোগ্রামের স্ট্যান্ডার্ড আউটপুট (grep -r 'wanted_pattern' *) এর সাথে সংযোগ করার জন্য পাইপ শেলটি বলবে।


সঠিক সমাধান হল grep -v "word" file , যা তার awk সমতুল্য:

awk '!/word/' file

যাইহোক, যদি আপনার কোন জটিল পরিস্থিতি থাকে যা আপনি চান তবে বলুন, XXX প্রদর্শিত হবে এবং YYY প্রদর্শিত হবে না , তারপরে বেশ কয়েকটি grep গুলি পাইপ করার পরিবর্তে সহজে আসে।

awk '/XXX/ && !/YYY/' file
#    ^^^^^    ^^^^^^
# I want it      |
#            I don't want it

আপনি এমনকি আরো জটিল কিছু বলতে পারেন। উদাহরণস্বরূপ: আমি যে লাইনগুলি XXX বা YYY ধারণ করছি, কিন্তু ZZZ নয়:

awk '(/XXX/ || /YYY/) && !/ZZZ/' file

প্রভৃতি


আমি একটি গুচ্ছ ফাইল সঙ্গে একটি ডিরেক্টরি আছে। আমি সকল ফাইল খুঁজতে চাই যা স্ট্রিং "স্পিডআপ" ধারণ করে না তাই আমি সফলভাবে নিম্নোক্ত কমান্ডটি ব্যবহার করেছি:

grep -iL speedup *

-v বিকল্পটি আপনাকে সমস্ত লাইন প্রদর্শন করবে যা প্যাটার্নটির সাথে মেলে না।

grep -v ^unwanted_word

আমি "আমি কীভাবে একটি শব্দ মিলে কিন্তু অন্যকে বাদ দিই না" প্রশ্নটি বুঝতে পেরেছি, যার জন্য একটি সমাধান সিরিজের দুটি greps হয়: প্রথম grep চেয়েছিলেন "শব্দ 1", দ্বিতীয় grep "word2" ব্যতীত:

grep "word1" | grep -v "word2"

আমার ক্ষেত্রে: আমার "প্লট" এবং "# প্লট" এর মধ্যে পার্থক্য করতে হবে যা grep এর "শব্দ" বিকল্পটি করবে না ("#" একটি বর্ণানুক্রমিক নয়)।

আশাকরি এটা সাহায্য করবে.


যদি আপনার grep পার্ল নিয়মিত এক্সপ্রেশন সমর্থন করে - -P বিকল্পটি আপনি করতে পারেন (যদি bash; যদি tcsh আপনাকে পালাতে হবে ! ):

grep -P '(?!.*unwanted_word)keyword' file

ডেমো:

$ cat file
foo1
foo2
foo3
foo4
bar
baz

আসুন এখন foo3 ছাড়া সব foo তালিকা

$ grep -P '(?!.*foo3)foo' file
foo1
foo2
foo4
$ 

Grep -v ব্যবহার করে বিপরীত ম্যাচ:

grep -v "unwanted word" file pattern




grep