যখন প্যাটার্নটিতে হাইফেন থাকে তখন গ্রেপের সাথে ম্যাচ করুন “-”


11

আমি command a এর সাথে $ b এর সাথে মিল রাখতে নীচের কমান্ডটি লিখেছি, কিন্তু যখন মানটি "-" অন্তর্ভুক্ত করে, তখন আমি একটি ত্রুটি পাই। আমি কীভাবে এড়াতে পারি?

# a="-Xmx5324m"
# b="-Xmx5324m"
#
#
#  echo "$a"  | grep -Fxc "$b"
grep: conflicting matchers specified

3
grep -Fxc -- "$b" <<< "$a"অপ্রয়োজনীয় পাইপ এড়াতে আপনার আদেশটি পরিবর্তন করতে বিবেচনা করুন
h3rrmiller

8
যাইহোক, আপনি কি সত্যিই একটি রেজেক্স ম্যাচ চান, বা আপনি কেবল পরীক্ষা করতে চান যে স্ট্রিংটি অন্য স্ট্রিংয়ের (বা একটি স্ট্রিংয়ের সমান) কিনা? সেক্ষেত্রে শেলটি বিল্ট-ইনগুলি [[ ... ]]বা caseআরও ভাল পছন্দ হবে, যেহেতু আপনি echoবাচ্চাদের প্রক্রিয়াগুলির আইডিসিঙ্ক্রেসিগুলি এবং উভয়ই এড়িয়ে চলে ।
Uwe

কোনও স্ট্রিং সমান কিনা তা আমার পরীক্ষা
yael


আর একটি বিকল্প যা আপনার তালিকাভুক্ত কেউ ব্যবহার করবেন না: উদ্ধৃত স্ট্রিংয়ের ভিতরে ড্যাশ থেকে বাঁচা সম্ভব তাই এটি grepকোনও বিকল্প শুরুর চেয়ে আক্ষরিক চরিত্র হিসাবে বোঝা যায় , অর্থাত্ echo test-test | grep "\-test"একটি অজানা -tপতাকা সম্পর্কে অভিযোগ না করে মিলবে ।
অ্যারন

উত্তর:


20

--আপনার নিদর্শন আগে রাখুন :

echo "$a"  | grep -Fxc -- "$b"

-- অনেক কমান্ড / শেল বিল্ট-ইনগুলির জন্য কমান্ড বিকল্পের সমাপ্তি নির্দিষ্ট করে, এরপরে অবশিষ্ট আর্গুমেন্টগুলি অবস্থানগত আর্গুমেন্ট হিসাবে বিবেচিত হবে।


13

@ সেবাসথের দুর্দান্ত উত্তর ছাড়াও , আপনি বলতে পারেন যে grep's -e প্যাটার্ন একটি প্যাটার্ন হিসাবে প্যাটার্ন ব্যবহার করার বিকল্প রয়েছে (এখানে <<< zshপরিবর্তে এখানে স্ট্রিং অপারেটর ব্যবহার করে echo; printf '%s\n' "$a"পোর্টেবলতার জন্য দেখুন )।

grep -Fxc -e "$b" <<<"$a"

বা সমস্ত অন্যান্য বিকল্পের পাশে।

grep -Fxce "$b" <<<"$a"

আপনার লক্ষ্য যেহেতু বাইট-টু-বাইট স্ট্রিং সমতা তুলনা ব্যবহার [বদলে কমান্ড।

if [ "$a" = "$b" ]

অথবা যদি $aথাকে $bতবে [[...]]ksh কনস্ট্রাক্ট ব্যবহার করে :

if [[ $a == *"$b"* ]]

বা বোর্ন-জাতীয় শেলগুলিতে আরও বহনযোগ্য:

case $a in
  *"$b"*) ...
esac

==[কমান্ডের জন্য আদর্শ নয় ; এটি একটি bashism এর=পরিবর্তে ব্যবহার করুন।
ওয়াইল্ডকার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.