मैं एक स्ट्रिंग के लिए कैसे grep कर सकता हूं जो डैश / हाइफ़न से शुरू होता है?


347

मैं उस स्ट्रिंग के लिए टटोलना चाहता हूं -Xजो एक फ़ाइल में डैश / हाइफ़न के साथ शुरू होती है, जैसे , लेकिन यह कमांड लाइन तर्क के रूप में भ्रमित कर रहा है।

मैंने कोशिश की:

grep "-X"
grep \-X
grep '-X'

जवाबों:


465

उपयोग:

grep -- -X

संबंधित: एक नंगे डबल डैश का क्या मतलब है? ( नैट्टी के बारे में अखरोट के लिए धन्यवाद )।


57
हम में से जो इस स्तर पर सोच रहे हैं, उनका क्या --मतलब है या क्या है: unix.stackexchange.com/questions/11376/…
बारे में अखरोट

2
सिल्वर सर्चर (एजी) के साथ भी काम करता है।
ज़ेव Eisenberg

यदि आप परिवर्तनशील रिक्त स्थान के साथ उपयोग करना चाहते हैं, तो आपको कुछ इस तरह का उपयोग करना चाहिए:ARGS="-a -b -c" grep -- "$ARGS"
zapstar

2
@ ज़ापस्टार या बस grep -- "--name awesome",।
ब्रेट विडमेयर

@BrettWidmeier, हाँ, मुझे चर का उपयोग नहीं करना चाहिए था, यह लोगों को भ्रमित करता है।
ज़ापस्टार

57

डैश बश में एक विशेष पात्र है जैसा कि http://tldp.org/LDP/abs/html/special-chars.html#DASHREF पर दिया गया है । तो इससे बचने के लिए बस एक बार आपको बैश अतीत हो जाता है, लेकिन ग्रीप अभी भी डैश (विकल्प प्रदान करके) का अपना अर्थ है।

तो आपको वास्तव में इसे दो बार भागने की ज़रूरत है (यदि आप अन्य उल्लिखित उत्तरों का उपयोग नहीं करना चाहते हैं)। निम्नलिखित इच्छा / काम करना चाहिए

grep \\-X
grep '\-X'
grep "\-X"

बैश एक स्क्रिप्ट / प्रोग्राम में तर्कों को कैसे पास करता है, यह जानने के लिए एक .sh स्क्रिप्ट तैयार करना है, जो सभी तर्कों को सही तरीके से पूरा करे। मैं समय-समय पर खेलने के लिए echo-args.sh नामक स्क्रिप्ट का उपयोग करता हूं, इसमें सभी शामिल हैं:

echo $*

मैं इसका आह्वान करता हूं:

bash echo-args.sh \-X
bash echo-args.sh \\-X
bash echo-args.sh "\-X"

तुम्हें नया तरीका मिल गया है।


1
मुझे नहीं लगता - ABS गाइड जो कहता है उसके बावजूद बैश में एक विशेष चरित्र है। बैश के साथ शुरू होने वाले तर्कों को संसाधित नहीं करता है - दूसरों की तुलना में अलग। कमांड या बिल्ट-इन उस बैश बाद में कॉल एक डैश के साथ शुरू होने वाले तर्कों को संभाल लेगा हालांकि यह फिट दिखता है। अधिकांश बैश बिल्ट-इन और लिनक्स और जीएनयू कमांड हैंडल - एक विकल्प टर्मिनेटर के रूप में। उन आदेशों और तर्कों को देखने के लिए Use सेट -x ’का उपयोग करें, जिन्हें बैश करने से पहले उनका उपयोग किया जाता है, लेकिन बाद में बैश ने एस्केप, ग्लब्स और ब्रेस का विस्तार किया है। ग्रेप एक भ्रामक उदाहरण है क्योंकि यह बैकस्लैश से बचने का अपना काम करता है।
नूह स्परियर

25

grep -e -X चाल चलेगा।


1
मेरे grep -e नहीं है, बहुत अजीब
माइक

14
हार के लिए सोलारिस
माइक

2
/ Usr / xpg4 / bin / grep, btw से सोलारिस पर उपलब्ध है। उस निर्देशिका में अधिक-पूर्ण उपयोगिताओं के बहुत सारे।
Pra

इसने MinGW के तहत काम किया ( MinGW समर्थन नहीं करता है -P(लेकिन यह एक और कहानी है और यहां लागू नहीं होती है))।
पीटर मोर्टेंसन



7

मेरे पास सोलारिस मशीन तक पहुंच नहीं है, लेकिन grep "\-X"मेरे लिए लिनक्स पर काम करता है।


5

पहले से बताए गए प्रसंस्करण तर्कों को रोकने के लिए "-" का उपयोग करने का सही तरीका होगा। यह उपकरण के स्रोत में getopt_long (GNopt C-function से getopt.h) के उपयोग के कारण है।

यही कारण है कि आप अन्य कमांड-लाइन टूल पर समान घटना को नोटिस करते हैं; चूंकि उनमें से अधिकांश GNU उपकरण हैं, और इस कॉल का उपयोग करते हैं, इसलिए वे समान व्यवहार प्रदर्शित करते हैं।

एक साइड नोट के रूप में - getopt_long है जो हमें -rlo और --really_long_option और दुभाषिया में तर्कों के संयोजन के बीच शांत विकल्प देता है।


3

यदि आप एक और उपयोगिता का उपयोग कर रहे हैं जो कि grep के लिए एक तर्क पास करता है, तो आप उपयोग कर सकते हैं:

'[-]X'


-1
ls -l | grep "^-"

आशा है कि यह आपके उद्देश्य की पूर्ति करेगा।


2
यह अभिव्यक्ति केवल उन पंक्तियों को पकड़ती है जो डैश के साथ शुरू होती हैं। यह प्रारंभिक प्रश्न का अनुपालन नहीं करता है। वह डैश द्वारा शुरू होने वाली एक स्ट्रिंग की खोज करना चाहता है, लेकिन जिन लाइनों में यह स्ट्रिंग शामिल है, वे डैश से शुरू नहीं हुई हैं। शुरुआती सवाल में, डैश से शुरू होने वाली स्ट्रिंग लाइन में कहीं भी हो सकती है।
लॉरेंट साइमन

-1

grep "^ -X" फ़ाइल

यह grep करेगा और सभी लाइनों को फाइल बनाएगा। ^ grep में "^" से शुरू होने वाली रेखा को इंगित करता है


1
वहाँ पहले से ही एक जवाब है जो सुझाव दिया है कि stackoverflow.com/a/27440348/441757 (एक साल से अधिक पहले पोस्ट)
sideshowbarker

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