গ্রেপ ব্যবহার করে নির্ভুল স্ট্রিং ম্যাচ করুন


63

আমার কাছে একটি পাঠ্য ফাইল রয়েছে:

deiauk 1611516 afsdf 765
minkra 18415151 asdsf 4152
linkra sfsfdsfs sdfss 4555
deiauk1 sdfsfdsfs 1561 51
deiauk2 115151 5454 4
deiauk 1611516 afsdf ddfgfgd
luktol1 4545 4 9
luktol 1

এবং আমি ঠিক মেলাতে চান deiauk। আমি যখন এটি করি:

grep "deiauk" file.txt

আমি এই ফলাফল পেতে:

deiauk 1611516 afsdf 765
deiauk1 sdfsfdsfs 1561 51
deiauk2 115151 5454 4

তবে আমার কেবল এটি দরকার:

deiauk 1611516 afsdf 765
deiauk 1611516 afsdf ddfgfgd

আমি জানি একটি -wবিকল্প আছে, তবে তারপরে আমার স্ট্রিংয়ের পুরো লাইনটি মেশাতে হবে।


4
আপনি কি আসলে চেষ্টা করেছেন grep -w? (এই বিকল্পটি হ'ল সেই উদ্দেশ্যে, এবং এটি আমার পক্ষে কাজ করে)) - দ্রষ্টব্য: বিকল্পটি -xপুরো লাইনের সাথে মেলে।
জানিস

"আমি ঠিক deiaukdeiauk 1611516 afsdf 765
অ্যালেক্স

উত্তর:


127

এর মধ্যে একটি ব্যবহার করে দেখুন:

grep -w "deiauk" textfile

grep "\<deiauk\>" textfile

3
স্ট্রিংয়ের শেষে আপনার যদি কোনও ড্যাশ ( - ) থাকে তবে এই স্ক্রিপ্টটি এটিকে ফলস্বরূপ এনে দেবে, যা প্রত্যাশিত ছিল না।
এভিস

সঠিক @ এভার্ট: শব্দগুলিতে কেবলমাত্র আলফা চর, অঙ্ক এবং আন্ডারস্কোর অন্তর্ভুক্ত থাকে, সুতরাং আপনার যদি সংক্ষিপ্ত বিবরণ বা অন্য আইটেম হাইফেনেটেড থাকে তবে এটি কার্যকর হয় না।
শে

@ সাইরাস আমি শব্দটিতে vi / vim *কমান্ড ব্যবহার করার সময় দ্বিতীয়টি শিখেছি ।
শুভা

এটি কোনও বিশেষ চরিত্রের জন্য কাজ করে না যেমন উদাহরণস্বরূপ org.apache.avro avroগ্রেপযুক্ত org.apache.avro avro+mapred(* চেষ্টা করা হয়েছে)
বিশ্রামান্ত

12

জিএনইউ দিয়ে এটি ব্যবহার করে দেখুন grepএবং এর সাথে শব্দের সীমানা চিহ্নিত করুন \b:

grep "\bdeiauk\b" file

আউটপুট:

deiauk 1611516 afsdf 765

দেখুন: http://www.regular-expressions.info/wordboundaries.html


ধন্যবাদ তবে কেন এটি আমার পক্ষে কাজ করছে না? echo "Enter login: " $vard grep -E "$\bvard\b" file.txt
ব্যবহারকারী 3334375

চেষ্টা করুনgrep "\b${vard}\b" file.txt
সাইরাস

1
এখনও কাজ করে না: /
user3334375

আপনার প্রয়োজন হবে read:read -p "Enter login: " vard; grep "\b${vard}\b" file.txt
সাইরাস

7

যদি আপনার grepসমর্থন -P(PCRE), আপনি করতে পারেন:

$ grep -P '(^|\s)\Kdeiauk(?=\s|$)' file.txt 
deiauk 1611516 afsdf 765
deiauk 1611516 afsdf ddfgfgd

4
হাইফেনেটেড শব্দের সাথে এটিই একমাত্র উত্তর।
শে

5

আপনার আসল উপাত্তের উপর নির্ভর করে আপনি শব্দের পরে কোনও স্থান অনুসন্ধান করতে পারেন:

grep 'deiauk ' file.txt 

আপনি যদি জানেন তবে এটি লাইনটির শুরুতে হওয়া উচিত, এটির জন্য পরীক্ষা করুন:

grep '^deiauk ' file.txt 

দুঃখের বিষয়, এটি ব্যতীত অন্যান্য সমস্ত উত্তরই ভুল।
শাতু

@ শাটু ধন্যবাদ! সুতরাং আসুন দেখি "শীর্ষে বুদ্বুদ হওয়া" এর জন্য এটি কতক্ষণ সময় নেয় ... আমি কৌতূহলী কারণ আমি পুরানো প্রশ্নের উত্তর যুক্ত করতে চাই ... আমার ধারণা এটি এটি অনুমান করা হয়েছে তবে আমি এটি সন্দেহ করি। এটি আমার পক্ষে ঠিক সুন্দর হবে তবে পাঠকদের জন্য এটি আসলে কার্যকর। এটি একটি ভাল উদাহরণস্বরূপ মামলা করার জন্য, আমি আপনাকে অন্য উত্তরগুলি কী অনুপস্থিত তা সংক্ষেপে একটি মন্তব্য লিখতে বলতে পারি?
ভোলকার সিগেল

(1) 10 কে প্রতিনিধি পৌঁছে অভিনন্দন। এই উত্তরটি আগে দেওয়া হয়েছিল এবং মুছে ফেলা হয়েছিল তা দেখার এখন আপনারা অধিকার পেয়েছেন। (২) যা বলা হয় তার উপর ভিত্তি করে যতটা সম্ভব বিস্তৃতভাবে প্রশ্নের উত্তর দেওয়া আরও ভাল , এবং কেবলমাত্র নমুনা তথ্যের জন্য কাজ করে এমন কোনও উত্তর দেবেন না। প্রশ্নের উদাহরণের ডেটা থেকে এটি উপস্থিত হয় যে কলামগুলি ফাঁক দিয়ে আলাদা করেছে - তবে এটি নির্দিষ্ট করা হয়নি। অন্যান্য সমস্ত উত্তর ট্যাব-বিভাজিত কলামগুলির জন্যও কাজ করবে। (3) আপনি টাকোমির (মুছে ফেলা) উত্তরের মারাত্মক ত্রুটি এড়িয়ে গেছেন ^- তবে অন্য সমস্ত উত্তরগুলি কাজ করে ... (চালিয়ে যাওয়া)
জি-ম্যান

(চালিয়ে যাওয়া) ... যদি স্ট্রিংটি প্রথমটি ব্যতীত অন্য কোনও ক্ষেত্রে প্রদর্শিত হয়। (৪) এছাড়াও, '' ডিয়াউক '' যদি শেষ ক্ষেত্র হয় (যেমন, এর পরে কিছুই নেই) তবে অন্যান্য সমস্ত উত্তর কাজ করে।
জি-ম্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.