grep फेडोरा बनाम उबंटू पर अलग तरह से व्यवहार कर रहा है


13

इसलिए जब मैं इसे फेडोरा में चलाता हूं तो मैं इसे देख रहा हूं:

$ ls hmm_data/indivA12_AATAAG/refs/par1/
2R-orths.alleles  2R-ref.alleles
$ ls hmm_data/indivA12_AATAAG/refs/par1/ | grep -F '-ref.alleles'
2R-ref.alleles

लेकिन जब मैं उबंटू (उसी डेटा) पर दौड़ता हूं तो मुझे ग्रीप से कोई परिणाम नहीं मिलता है:

$ ls hmm_data/indivA12_AATAAG/refs/par1/
2R-orths.alleles  2R-ref.alleles
$ ls hmm_data/indivA12_AATAAG/refs/par1/ | grep -F '-ref.alleles'

किसी भी विचार क्या हो सकता है? मैं कुछ ऐसा कैसे ले सकता हूं जो दोनों प्रणालियों पर समान काम करेगा?


कैसे के बारे में ls *-ref.alleles?
ग्लेन जैकमैन

@glennjackman, मैंने उस बारे में सोचा, लेकिन किसी ने ठीक वैसा ही किया और उस लाइन को बैश स्क्रिप्ट में बताया, जिसे मैं ठीक करने की कोशिश कर रहा हूं :-) मैं केवल यह मान सकता हूं कि उनके पास एक कारण था ...
ग्रेग_थे_ऑन्ट

जवाबों:


30
grep -F '-ref.alleles'

के बराबर है:

grep -F -ref.alleles

(प्रेरितों के बीच कोई भी वर्ण शेल मेटाचैकर नहीं है, इसलिए उन्हें उद्धृत करने का कोई प्रभाव नहीं है।)

यह बदले में इसके बराबर है:

grep -F -r -e f.alleles

-उपसर्ग विकल्पों के सामान्य पार्सिंग द्वारा । -eविकल्प एक तर्क लेता है, लेकिन -Fऔर -rनहीं है।

चूँकि आपने grep के लिए कोई फ़ाइल निर्दिष्ट नहीं की है, डिफ़ॉल्ट व्यवहार स्टैडिन पर कार्रवाई करने के लिए है ... सिवाय इसके कि -rविकल्प का कोई मतलब नहीं है, इसलिए यह .(वर्तमान निर्देशिका) खोज के लिए पुनरावृत्ति करता है और स्टड को अनदेखा करता है। कुछ संस्करणों में।

आपको --regexp से पहले "कोई और विकल्प नहीं" सूचक का उपयोग करने की आवश्यकता है जो अंदर से शुरू होता -है

grep -F -- -ref.alleles

मैंने उस बिंदु को ट्रैक किया जहां -rकोई फ़ाइल तर्क के साथ व्यवहार नहीं बदला। यह संस्करण 2.11 में था, 2 मार्च 2012 को जारी किया गया। रिलीज की घोषणा देखें।

जो व्यवहार प्रभावित करता है, वह यह है और यह एक है

यदि आप grep --versionअपनी दो मशीनों पर चलते हैं, तो मुझे यकीन है कि आप पाएंगे कि उनमें से एक 2.11 की तरफ है


महान जवाब, अनुसंधान के लिए सभी तरह के संस्करण के लिए धन्यवाद जहां व्यवहार बदल गया।
ऋचादिनेश

2
वाह धन्यवाद। आप ठीक कह रहे हैं, मुझे grep २.६.३ बनाम grep २.१४ मिला है।
ग्रेग_थे_अंत

6

अग्रणी -समस्या है। समान परिणाम जोड़ने के लिए --:

grep -F -- '-ref.alleles'

से man bash:

A -- signals the end of options and disables further option
processing. Any arguments after the -- are treated as filenames
and arguments.

1
यह उबंटू और फेडोरा पर अलग क्यों है? क्या यह दोनों पर एक ही नकारात्मक परिणाम नहीं देना चाहिए?
ग्लूऑन

धन्यवाद। यदि इस कमांड को किसी अन्य कमांड में पाइप किया जाना है, तो क्या वहां कोई समस्या पैदा होगी? या करता है - सिर्फ उस कमांड पर लागू होता है जहां यह दिखाता है?
Greg_the_Ant

4
बैश मैन पेज वास्तव में प्रासंगिक नहीं है। यह --बैश की अपनी कमांड लाइन के उपचार के बारे में बताता है , जो कि grep की समझ से स्वतंत्र है --। वे उसी तरह से काम करते हैं क्योंकि यह एक सामान्य सम्मेलन है, लेकिन सामान्य तौर पर आपके शेल का मैन पेज आपको अन्य कार्यक्रमों के तर्क के बारे में कुछ भी नहीं बताता है।

1

चेक .bashrc अगर आपके grep कमांड पर कोई एलियास हैं जो इसे व्यवहार में ओवरराइड करता है। शायद यह मुद्दा है। "-F" परम के बिना भी grep आज़माएं।

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