सीड का उपयोग करके डॉट के बाद अंकों का मिलान कैसे करें?


75

मैं sedअंकों के साथ सभी पैटर्न का उपयोग करने की कोशिश कर रहा हूं, जिसके तुरंत बाद एक रिक्त स्ट्रिंग द्वारा एक डॉट (जैसे 3., 355.) के साथ अंक । इसलिए मैं कोशिश करता हूं:

sed 's/\d+\.//g' file.txt

लेकिन यह काम नहीं करता है। ऐसा क्यों है?


1
मुझे यह लेख बहुत उपयोगी लगा
Stphane

जवाबों:


110

क्योंकि सीड perl नहीं है - sed regexes के पास \dआशुलिपि नहीं है :

sed 's/[[:digit:]]\+\.//g'

sed नियमित अभिव्यक्ति प्रलेखन यहाँ


3
यदि आप शून्य या अधिक अंक चाहते हैं । /[[:digit:]]*\. /स्ट्रिंग से मेल खाएगा foo.क्योंकि आप शून्य अंकों के लिए अनुमति देते हैं। यदि आप दिखाए गए अनुसार एक या अधिक उपयोग करना चाहते हैं\+
ग्लेन जैकमैन

71

दो समस्याएं:

  1. sedसमर्थन नहीं करता है \d। का प्रयोग करें [0-9]या [[:digit:]]

  2. +विशेष अर्थ प्राप्त करने के लिए backslashed किया जाना चाहिए: \+


6
के बजाय backslashing + (जो मैक ओएस एक्स पर काम नहीं करता है, उदाहरण के लिए) आप का उपयोग कर सकते हैं -ई विकल्प के लिए interpret regular expressions as extended (modern) regular expressions rather than basic regular expressions (BRE's).अफसोस की बात है, यह \ d मुद्दे के साथ मदद नहीं करता है ...
gMale

4
@gmale: -EGNU sed के लिए काम नहीं करता है, यह -rइसके बजाय उपयोग करता है ।
कोरोबा

12
ठीक है ... यह ज़रूर लगता है कि sedपोर्टेबिलिटी की बात है तो बस बेकार है ...
iconoclast

@choroba मुझे लगता है कि मैंने आज खुद को भ्रमित किया। मैं अपनी शोर टिप्पणियों को हटाने जा रहा हूँ ...
स्टीवन लू

मूल रूप से, मैं लोगों को आगाह करने की कोशिश कर रहा था: यदि आप -Eबीएसडी sed में ( BSD sed -rपर और GNU sed पर) विस्तारित रेगेक्स का उपयोग नहीं करते हैं , तो +न तो \+( न ही साथ ही ?) बिल्कुल काम करेगा, जबकि GNU sed में आप उन्हें बैकस्लैश के साथ काम करने के लिए प्राप्त करें। इसलिए स्क्रिप्टिंग में विस्तारित रेगेक्स का उपयोग करने की सामान्य सिफारिश
स्टीवन लू

3

Sed मैन पेज संदर्भ re_format मैन पेज। यह 2 भेद करता है: (1) अप्रचलित बनाम विस्तारित नियमित अभिव्यक्ति; (२) गैर-वर्धित बनाम संवर्धित नियमित भाव। सभी 4 संयोजन संभव हैं। अप्रचलित और विस्तारित दोनों के लिए sed में समर्थन है, लेकिन या तो केवल गैर-संवर्धित के लिए। \ D ऑपरेटर नियमित रूप से बढ़े हुए भावों की एक विशेषता है, इसलिए इसे sed द्वारा समर्थित नहीं किया गया है।

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