मैं grep में केवल संख्या कैसे प्राप्त करूं?


57

मेरे पास इस तरह की फाइल है:

 other lines . . .    
 blah blah blah (:34)

मैं उपरोक्त फ़ाइल में संख्याओं की घटना को खोजना चाहता हूं। मेरे द्वारा लाया गया:

grep [0-9] filename

लेकिन यह पूरी छपाई है:

blah blah blah (:34)

बल्कि मुझे ही चाहिए 34। क्या ऐसा करने का कोई तरीका है?


भविष्य में, grep (या किसी अन्य प्रोग्राम) के लिए मैन पेज भी देखें। मैन पेज कार्यक्रम के कई सामान्य उपयोगों के लिए आवश्यक विकल्पों का विवरण देता है। जैसेman grep
हसरत

आप इस कोशिश कर सकते हैं> grep -o '[0-9] [0-9] *' testfile

जवाबों:


75

आप grep -Eविस्तारित नियमित अभिव्यक्ति सिंटैक्स तक पहुँच प्राप्त करने के लिए उपयोग कर सकते हैं ( उदाहरण के लिए जैसे )

मैंने नीचे सामग्री के साथ एक टेस्टफाइल बनाया है:

>cat testfile
this is some text
with some random lines

again some text
ok now going for numbers (:32)
ok now going for numbers (:12)
ok now going for numbers (:132)
ok now going for numbers (:1324)

अब आपके द्वारा उपयोग किए जाने वाले पाठ से अकेले संख्याओं को टटोलने के लिए

>grep -Eo '[0-9]{1,4}' testfile
32
12
132
1324

आउटपुट होगा।

यहां "-ओ" का उपयोग लाइन के मिलान खंड को आउटपुट करने के लिए किया जाता है, बजाय लाइन की पूरी सामग्री के।

स्क्वीगली कोष्ठक (जैसे {और}) मैच के उदाहरणों की संख्या को इंगित करते हैं। {1,4} के लिए आवश्यक है कि पिछला वर्ण या वर्ण वर्ग कम से कम एक बार हो, लेकिन चार बार से अधिक नहीं।

उम्मीद है की यह मदद करेगा


3
अच्छा लगा। इसके अलावा, अंकों के 4 या अधिक मनमानी संख्या से मेल खाने के लिए, उपयोग करें grep -Eo '[0-9]{1,}' testfile
FractalSpace

8

आप POSIX मानक के[:digit:] खंड 9.3.5 द्वारा निर्दिष्ट RE ब्रैकेट अभिव्यक्ति का उपयोग कर सकते हैं , केवल "शब्द" मिलान करने के लिए ध्वज के साथ संयोजन में-o

$ grep -o '[[:digit:]]*' <<< $'No number in this line\nbut 123 here'                                                     
123

5

grep -oलाइन के मिलान वाले भाग को ही प्रिंट करेगा। अन्यथा grep पैटर्न के साथ किसी भी लाइन को प्रिंट करेगा।


1

मैं आपकी फ़ाइल को स्थानीय रूप से या दूरस्थ रूप से एक्सेस करने के लिए कर्ल का उपयोग करूँगा, फिर मैं (:) में लिपटे हुए नंबरों वाली रेखाओं को पकड़ लूंगा (फिर) उन टुकड़ों को काटकर फ़ाइल में लिख दूंगा

स्वीकार किए गए उत्तर को अनदेखा करता है फ़ाइल की पिछली पंक्तियों में नंबर हो सकते हैं, यह उदाहरण डेटा के लिए काम करता है, लेकिन क्या हुआ अगर फ़ाइल दूरस्थ थी?

स्थानीय

curl file:///home/$USER/Public/input.txt  | grep -o '(:.*)' | cut -d ":" -f 2 | cut -d ")" -f 1 > output.txt

इस उदाहरण output.txtमें आपके वर्तमान फ़ोल्डर पर लिखा जाएगा, हम input.txtआपके सार्वजनिक फ़ोल्डर से पहुंच रहे हैं ।

रिमोट

curl https://yoursite.com/Public/input.txt  | grep -o '(:.*)' | cut -d ":" -f 2 | cut -d ")" -f 1 > output.txt

में इस उदाहरण output.txtअपने वर्तमान फ़ोल्डर में अधिक लिखा जाएगा, हम तक पहुँच रहे हैं input.txtसे https://yoursite.com/Public/


1
curlजब एक साधारण काम catकरेगा तो उसका उपयोग क्यों करें ?
पर्लडक

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