Grep के साथ मिलान करें जब पैटर्न में हाइफ़न होता है "-"


11

मैंने $ b के साथ $ का मिलान करने के लिए निम्न आदेश लिखा था, लेकिन जब मूल्य में "-" शामिल होता है, तो मुझे एक त्रुटि मिलती है। मैं इससे कैसे बच सकता हूं?

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

3
grep -Fxc -- "$b" <<< "$a"अनावश्यक पाइप से बचने के लिए अपने कमांड को बदलने पर विचार करें
h3rrmiller

8
वैसे, क्या आप वास्तव में एक रेगेक्स मैच चाहते हैं, या क्या आप बस यह परीक्षण करना चाहते हैं कि क्या एक स्ट्रिंग एक स्ट्रिंग के बराबर (या एक विकल्प के रूप में) है? उस स्थिति में, शेल बिल्ट-इन [[ ... ]]या caseएक बेहतर विकल्प होगा, क्योंकि आप दोनों echoऔर बच्चे की प्रक्रियाओं की प्रक्रिया से बचते हैं।
उवे

क्या कोई स्ट्रिंग समान है यह मेरा परीक्षण है
येल


एक और विकल्प जिसका आप उपयोग नहीं करते हैं जिसे कोई भी सूचीबद्ध नहीं करता है: एक उद्धृत स्ट्रिंग के अंदर डैश से बचना संभव है, इसलिए इसे grepएक विकल्प की शुरुआत के बजाय एक शाब्दिक चरित्र के रूप में समझा जाता है , अर्थात echo test-test | grep "\-test"अज्ञात -tध्वज के बारे में शिकायत करने के बजाय मेल खाएगा ।
आरोन

जवाबों:


20

--अपने पैटर्न से पहले रखें :

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

-- कई कमांड / शेल बिल्ट-इन के लिए कमांड विकल्पों के अंत को निर्दिष्ट करता है, जिसके बाद शेष तर्कों को स्थिति संबंधी तर्कों के रूप में माना जाता है।


13

@ Sebasth के शानदार जवाब के अलावा , आप बता सकते हैं कि PATTERN को grep's -e पैटर्न के रूप में PATTERN का उपयोग करने के विकल्प के साथ (यहां <<< 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

==[आदेश के लिए मानक नहीं है ; यह एक बशीवाद है=इसके बजाय उपयोग करें ।
वाइल्डकार्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.