2013-05-09 5 views
5

मेरे आदेश इस तरह है:यह sed कमांड नंबर से मेल खाता क्यों काम नहीं करता है?

Number cats 

हालांकि, वास्तविक परिणाम है:

echo "12 cats" | sed 's/[0-9]+/Number/g' 

मैं परिणाम होने की उम्मीद (मैं sed वेनिला मैक में उपयोग कर रहा हूँ) :

12 cats 

किसी को भी इस बारे में विचार है? धन्यवाद!

+0

लिनक्स के लिए, आप मैक के लिए '-r' विकल्प का उपयोग कर सकते हैं, आप' -E' का उपयोग कर सकते हैं ... जो लिनक्स के कुछ बदलावों पर एक संगतता शिम – Petesh

उत्तर

7

+ संशोधक विस्तार मेरे लिए काम करता है:

echo "12 cats" | sed 's/[0-9][0-9]*/Number/g' 

इसके अलावा, -E स्विच + संशोधक काम होगा, choroba का जवाब देखें।

+0

ऐसा लगता है कि बीएसडी sed डिफ़ॉल्ट रूप से' + 'का समर्थन नहीं करता है .. –

16

+ को इसका विशेष अर्थ प्राप्त करने के लिए बैकस्लाश किया जाना चाहिए।

echo "12 cats" | sed 's/[0-9]\+/Number/g' 
+1

के रूप में भी काम करता है जो मेरे लिए काम नहीं करता है (वेनिला मैक sed)। – zoul

+0

@zoul: http://stackoverflow.com/q/4453760/1030675 – choroba

+2

आहा देखें, धन्यवाद! (मैक sed ''' संशोधक को पहचानने के लिए बहुत रूढ़िवादी है। '-E' स्विच विस्तारित नियमित अभिव्यक्तियों को चालू करता है जहां' + 'अनचाहे काम करता है।) – zoul

1

perl का उपयोग करें, यह यूनिक्स या लिनक्स पर काम करेगा।

echo "12 cats" | perl -pe 's/\d+/Number/g' 
0

एक बहुत रहस्यवादी तरीका है कि (कम से कम संसाधनों में मैं अब तक है ..) नहीं समझाया गया है में, आप अगले मामले की जांच होनी चाहिए:

ग्लोबिंग (बैश के संदर्भ में) , regex, विस्तारित regex

अपने प्रश्न के लिए ऐसा लगता है कि expr 'आप sed को दे दिया एक regex या विस्तारित regex है .... तो एक ट्यूटोरियल से मैं आप अपने वास्तविक से पहले भी -r डालूँ पढ़ sed में आदेश ...

गूंज "12 बिल्लियों" | sed -r's/[0-9] +/संख्या/जी '

उबंटू 16.04, बैश में मेरे लिए काम करता है।

+0

मैंने यह नहीं देखा कि यह 4 साल पहले है .... शायद मेरा उत्तर कोई और हाहा महत्वपूर्ण नहीं है ..... फिर भी यह जवाब में मेरी पहली पंक्ति पर जोर देता है। – YigalO

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