Ubuntu में "1" से शुरू होने वाली grep लाइनें


47

मैं उन पंक्तियों की खोज करने की कोशिश करता हूं जो "1" का उपयोग करके शुरू होती हैं

ls -1 | grep ^1*

लेकिन यह उन लाइनों को लौटाता है जो 1 से शुरू नहीं होती हैं। मैं यहां क्या याद कर रहा हूं?


बस एक और ध्यान दें: यदि आप lsआउटपुट को सीमित करने के लिए grep का उपयोग करना चाहते हैं , तो आप समस्याओं में चले जाएंगे यदि फ़ाइलनाम में कुछ अजीब अक्षर होते हैं, जैसे कि newlines ... कई अन्य कमांड (किसी तरह नहीं ls, कम से कम संस्करण नहीं जिसे मुझे जांचना है) शून्य से अलग आउटपुट देने का विकल्प है, जिसे आप तब सुरक्षित रूप से प्रोसेस कर सकते हैंgrep -z
Gert van den Berg

धन्यवाद, @GertvandenBerg! कुछ अजीबोगरीब किरदार जैसे कि नई कहानियों के कारण क्या समस्याएं पैदा हो सकती हैं? क्या आदेश अशक्त अलग आउटपुट देते हैं?
टिम

1
-0 के साथ खोजें, अधिकांश अन्य GNU टूल में -0 या -z विकल्प होता है। (सॉर्ट, xargs, आदि के रूप में अच्छी तरह से)। यदि फ़ाइल नाम में नई लाइनें हैं, तो यह जानना असंभव होगा कि क्या दो लाइनें एक फ़ाइल नाम है जिसमें एक नई रेखा या दो अलग-अलग फ़ाइलनाम हैं।
गर्ट वैन डेन बर्ग

जवाबों:


68

आपकी नियमित अभिव्यक्ति का मतलब यह नहीं है कि आप क्या सोचते हैं। यह एक (1) के साथ शुरू होने वाली सभी लाइनों (1) को दोहराए गए शून्य या अधिक (*) बार से मेल खाता है। सभी तार उस नियमित अभिव्यक्ति से मेल खाते हैं। grep '^1'जो तुम चाहते हो।


33

क्या आपने निम्नलिखित कोशिश की?

 ls -1 | grep "^1"

यही है, को हटा दें *, जो मूल रूप से बताता है grep, ^1अभिव्यक्ति के शून्य या अधिक घटनाओं को ढूंढें । दूसरे शब्दों में: 1 से शुरू होने वाली रेखाओं से मेल खाते हैं, या नहीं।


13

यद्यपि यह आपके प्रश्न का उत्तर नहीं देता है, लेकिन यह एक बेहतर समाधान है जो आपके लक्ष्य के लिए प्रकट होता है:

ls -ld 1*

आप उन सभी फ़ाइलों को सूचीबद्ध करने के लिए एक शेल ग्लोब का उपयोग कर सकते हैं जो इसके साथ शुरू होती हैं 1। ध्यान दें कि *नियमित अभिव्यक्तियों की तुलना में शेल ग्लोबिंग में एक अलग अर्थ है।


धन्यवाद! +1। शेल ग्लोबिंग और नियमित अभिव्यक्ति में * का अलग अर्थ कैसे है?
टिम

2
एक शेल ग्लोब * में एक वाइल्डकार्ड है जिसका अर्थ है " किसी भी वर्ण का 0 या उससे अधिक "। ओगेक्स अर्थ को ओटोकन के उत्तर में समझाया गया है।
जोर्डनम

3

^ 1. * पूरी लाइन से मेल खाता है, या जैसा कि ऊपर कहा गया है, ^ 1 लाइन में निहित स्ट्रिंग मिला।

रेगेक्स की विभिन्न शैलियों में चार्लों का प्रतिनिधित्व करने वाले विभिन्न प्रतीकों का उपयोग किया जाता है, कुछ विकल्प निर्दिष्ट करते हैं कि आपको कौन सी शैली चाहिए। और अलग-अलग विकल्प निर्दिष्ट करते हैं कि क्या आप पूरी लाइन से मेल खाना चाहते हैं, या बस इसका एक हिस्सा, या पूरे इनपुट को एक स्ट्रिंग के रूप में।

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