2013-02-18 41 views
10

यह एक असाइनमेंट के लिए है इसलिए मेरे पास sed का उपयोग करने के अलावा कोई विकल्प नहीं है।sed - sed का उपयोग कर आईपी पता निकालने के लिए कैसे?

फ़ाइल संदेश को देखते हुए, मैं सभी आईपी पते कैसे निकाल सकता हूं और उन्हें प्रिंट कर सकता हूं?

मैं पहली बार

sed -n '/((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])/p' messages 

की कोशिश की लेकिन यह कुछ भी नहीं छपी। कुछ शोध करने के बाद, मुझे पता चला कि sed गैर लालची ऑपरेटरों का समर्थन नहीं करता है? और |

मैं अपने मस्तिष्क को तोड़ रहा हूं लेकिन मैं गैर लालची ऑपरेटरों के बिना ऐसा करने का तरीका नहीं सोच सकता। मैं यह कैसे कर सकता हूँ?

+3

का प्रयोग करें। यह उस चीज़ का समर्थन करता है जिसके बारे में आप बात कर रहे हैं। –

+0

बहुत बहुत धन्यवाद, बहुत अच्छा काम करता है। मान लीजिए मैंने पर्याप्त शोध नहीं किया था। – MrDiggles

+2

याद रखें कि '-r' ध्वज एक 'जीएनयू sed' एक्सटेंशन है। यह अन्य seds के साथ काम नहीं करेगा। – Steve

उत्तर

6

उपयोग sed -r के साथ अपने स्वयं regex है (बढ़ाया regex) या \

18

वहाँ अधिक उपयुक्त होगा (यदि आप sed है, तो आप grep भी होना चाहिए):

grep -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])' messages 

यह कोई संशोधन (ठीक परीक्षण किया)

+0

इस पोस्ट को कौन सा/क्यों हटाया गया था? –

+1

मैंने आपके उत्तर को कम नहीं किया, लेकिन ओपी ने कहा कि उसे 'sed' का उपयोग करना चाहिए। तो शायद यही कारण है। हालांकि, मैं आपसे सहमत हूं, 'grep' 'sed -n' /.../ p' से अधिक उपयुक्त होगा। – Steve

+2

असल में, एक अंतर है। और यह समझना मुश्किल है कि ओपी वास्तव में क्या करने की कोशिश कर रहा है। आपका 'grep' कोड केवल आईपी पते लौटाएगा। ओपी वास्तव में आईपी पते वाले लाइनों से मिलान और प्रिंट करने की कोशिश कर रहा है। यह डाउनवोट का कारण हो सकता है। – Steve

7

के साथ कैप्चर समूहों से बचें यदि आपके पास GNU sed है, तो आप बसजोड़ सकते हैं 10 झंडा eres उपयोग करने के लिए:

sed -n '/\(\(1\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}\(1\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)/p' file 

ये अक्षर शामिल हैं::

  • कोष्ठक का उपयोग कर समूहों:

    sed -rn '/((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])/p' file 
    

    अन्यथा, आप कुछ वर्णों से बचने के लिए की आवश्यकता होगी (, )

  • घटना ब्रेसिज़: {, }
  • 'या' पाइप: |
  • गैर लालची प्रश्न चिह्न: ?

आम तौर पर (हालांकि अपने मामले के लिए नहीं) मैं मैच के लिए निम्नलिखित आईपी पते का उपयोग करें:

sed -rn '/([0-9]{1,3}\.){3}[0-9]{1,3}/p' file 

या में संगतता मोड:

sed -n '/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/p' file 
+0

'/ etc/hosts' –

+0

@sputnick पर काम नहीं करता है: आप सही हैं, मेरी प्रतिलिपि/पेस्ट कौशल अत्याचारी हैं। फिक्स्ड। – Steve

0

आप ऐसा भी कर सकते हैं:

+०१२३५१६४१०६१

विंडोज:

ipconfig | perl -nle'/(\d+\.\d+\.\d+\.\d+)/ && print $1' | sed '2 d' | head -n1; 

OSX: `sed -r`

ifconfig | perl -nle'/(\d+\.\d+\.\d+\.\d+)/ && print $1' | sed '1 d' | head -n1; 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^