উত্তর:
কেবল রিজেক্সপ অ্যাঙ্করগুলি নির্দিষ্ট করুন।
grep '^ABB\.log$' a.tmp
sed -r "s/^(.*)$/^\1$/" patterns.txt | egrep -f - a.tmp
grep -Fx ABB.log a.tmp
গ্রেপ ম্যান পৃষ্ঠা থেকে:
-এফ, - ফিক্সড-স্ট্রিংগুলি
PATTERN কে একটি (তালিকা হিসাবে) নির্দিষ্ট স্ট্রিং হিসাবে ব্যাখ্যা করে
--x, --line-regexp
কেবলমাত্র সেই ম্যাচগুলি নির্বাচন করুন যা পুরো লাইনের সাথে মেলে।
-F
? আপনি কি সোলারিসে আছেন? যদি তাই ব্যবহার হয়/usr/xpg4/bin/grep
grep
ব্যাশ স্ক্রিপ্টের ভিতরে ব্যবহার করছি এবং গ্রহণযোগ্য উত্তরে প্রস্তাবিত নিয়মিত অভিব্যক্তি ব্যবহার করার চেয়ে এই বিকল্পটি ভাল। কারণ ভেরিয়েবলের ভিতরে আমার কিছু বিশেষ চরিত্র রয়েছে যা আমি অনুসন্ধান করছি (যেমন .
) এবং কমান্ডটি ব্যবহার করার সময় আমার সেগুলি থেকে বাঁচতে হবে না।
এখানে আমি যা করি তা হল, যদিও অ্যাঙ্করগুলি ব্যবহার করা সর্বোত্তম উপায়:
grep -w "ABB.log " a.tmp
ABB.log
যা সাধারণ ক্ষেত্রে নয়, অর্থাত্ এটি বেশিরভাগ সময় ব্যর্থ হবে।
একক নেতৃস্থানীয় বা অনুসরণযোগ্য স্থানের মতো এত বেশি পরিমাণে প্রস্তাবনা ব্যর্থ হবে, যা ফাইল হাতে হাতে সম্পাদনা করা হচ্ছে কিনা তা বিবেচ্য হবে। এটি সে ক্ষেত্রে এটি কম সংবেদনশীল করে তুলবে:
grep '^[[:blank:]]*ABB\.log[[:blank:]]*$' a.tmp
শেলের একটি সাধারণ যখন পঠনযোগ্য লুপ এটি স্পষ্টভাবে করতে পারে:
while read file
do
case $file in
(ABB.log) printf "%s\n" "$file"
esac
done < a.tmp
অনুরূপভাবে awk সহ
awk '/^ABB\.log$/' file
আমি ওপি এবং অন্যান্য উত্তরগুলির প্রচেষ্টা সম্পর্কে কিছু অতিরিক্ত ব্যাখ্যা যুক্ত করার ইচ্ছা করি।
আপনি জন কুগেলম্যানস এর সমাধানও এর মতো ব্যবহার করতে পারেন :
grep -x "ABB\.log" a.tmp
স্ট্রিংটি উদ্ধৃত করা এবং বিন্দু ( .
) এড়ানোর ফলে -F
পতাকাটির আর দরকার হয় না ।
আপনাকে .
(বিন্দু) এড়াতে হবে (কারণ এটি কোনও চরিত্রের সাথে মেলে (কেবল .
পালানো না গেলে)) বা -F
গ্রেপ সহ পতাকাটি ব্যবহার করতে হবে । -F
পতাকা এটিকে একটি স্থির স্ট্রিং করে তোলে (কোনও রেজেক্স নয়)।
আপনি যদি স্ট্রিংটি উদ্ধৃতি না দিয়ে থাকেন তবে ডট ( .
) থেকে রক্ষা পাওয়ার জন্য আপনার ডাবল ব্যাকস্ল্যাশ লাগতে পারে :
grep -x ABB\\.log a.tmp
$ echo "ABBElog"|grep -x ABB.log
ABBElog #matched !!!
$ echo "ABBElog"|grep -x "ABB\.log"
#returns empty string, no match
-x
পুরো লাইন মেলে বাহিনী।.
ছাড়াই একটি অব্যাহত ব্যবহার করা উত্তরগুলি -F
ভুল।-x
আপনার প্যাটার্নের স্ট্রিং মোড়ানো করে স্যুইচ এড়াতে পারবেন । এই ক্ষেত্রে তৈরী নিশ্চিত করুন যে আপনি ব্যবহার করবেন না , পরিবর্তে অব্যাহতি , কারণ এর Regex ব্যাখ্যা প্রতিরোধ করবে এবং ।^
$
-F
.
-F
^
$
আপনি যদি কোনও স্ট্রিংটি শুরু করে মেলাতে চান -
তবে আপনার --
গ্রেপ ব্যবহার করা উচিত । নিম্নলিখিত যেগুলি --
ইনপুট হিসাবে নেওয়া হবে (বিকল্প নয়)।
উদাহরণ:
echo -f |grep -- "-f" # where grep "-f" will show error
echo -f |grep -F -- "-f" # whre grep -F "-f" will show error
grep "pat" -- "-file" # grep "pat" "-file" won't work. -file is the filename
-F
প্রয়োজন হবে না .
।
-F
আপনি এটি লেখার সময় উপস্থিত ছিলেন ? যদি না হয় তবে আপনি কোন সিস্টেমটি ব্যবহার করছেন? আমি এখনও আপনার উত্তরে সেই তথ্যটি খুঁজে পেলাম না, এটি আবার যখন আমি আবার পড়ি তখনও এটি। সত্যিই নিশ্চিত, আমি আপনার উত্তরটি কমপক্ষে দুবার পুরোপুরি পড়েছি। ;)
-F
উপলব্ধ ছিল। (আমি বলেছিলাম: "বা এর -F
সাথে পতাকা ব্যবহার করুন grep
")
-F
এর উত্তর হয় তবে পালানোর বিষয়ে কেন বিরক্ত করবেন? সে সম্পর্কে আপনার মতামত কী?
অনুরূপ কিছু করার চেষ্টা করার সময় এটি আমার পক্ষে ভাল কাজ করেছে:
grep -F ABB.log a.tmp
$ cat venky
ABB.log
ABB.log.122
ABB.log.123
$ cat venky | grep "ABB.log" | grep -v "ABB.log\."
ABB.log
$
$ cat venky | grep "ABB.log.122" | grep -v "ABB.log.122\."
ABB.log.122
$
এটি এইচপিউএক্সের সাথে রয়েছে, যদি ফাইলগুলির সামগ্রীতে শব্দের মধ্যে স্থান থাকে তবে এটি ব্যবহার করুন:
egrep "[[:space:]]ABC\.log[[:space:]]" a.tmp
আমার এই বৈশিষ্ট্যটির প্রয়োজন ছিল, তবে এটিও নিশ্চিত করতে চেয়েছিলাম যে আমি ABB.log এর আগে একটি উপসর্গ দিয়ে লাইনগুলি ফিরিয়ে দিইনি:
grep "\WABB.log$" -w a.tmp
\W
সন্তুষ্ট হয়, যা কোনও অনাহারযুক্ত অক্ষর, তাই xABBxlog
।