सीड में व्हॉट्सएप का मिलान कैसे करें?


218

मैं सीड में व्हॉट्सएप का मिलान कैसे कर सकता हूं? अपने डेटा में मैं सभी 3 + बाद के व्हाट्सएप कैरेक्टर (टैब स्पेस) से मिलान करना चाहता हूं और उन्हें 2 स्पेस से बदलना चाहता हूं। यह कैसे किया जा सकता है?

जवाबों:


226

चरित्र वर्ग \sखाली स्थान के पात्रों से मेल खाएगा <tab>और <space>

उदाहरण के लिए:

$ sed -e "s/\s\{3,\}/  /g" inputFile

दो स्थानों के साथ कम से कम 3 व्हाट्सएप के हर क्रम को स्थानापन्न करेगा।


REMARK : POSIX अनुपालन के लिए, चरित्र वर्ग का उपयोग [[:space:]]करने के बजाय \s, क्योंकि बाद एक जीएनयू sed विस्तार है। POSIX विनिर्देशों को sed और BREs के लिए देखें


5
अहा! यह गायब -e स्विच था जो मुझे मिला।
सेकोइया mcdowell सेप

25
मुझे '-r' स्विच भी जोड़ना पड़ा, जो विस्तारित रेगेक्स को स्पेस के रूप में सेड पहचान बनाने में सक्षम बनाता है।
HUB

39
ऐप्पल के साथ sedमुझे इस्तेमाल करना पड़ा [[:space:]]क्योंकि \sमेरे लिए काम नहीं किया। शायद \sएक GNU sed विस्तार है?
जारेड बेक

2
@JaredBeck धन्यवाद, विचारों से बाहर चल रहा था कि मेरा साधारण रेगेक्स काम क्यों नहीं कर रहा था .. यह लंगड़ा है, मुझे लगा कि मानक मानक रेगेक्स है। इसके अलावा -नहीं काम करता है और मैंने स्क्वाट किया है
कार्तिक

3
इसके बजाय [[:space:]एक का उपयोग कर सकते हैं [[:blank:]]जो क्षैतिज टैब और रिक्त स्थान से मेल खाता है (लेकिन कोई नया अंक, ऊर्ध्वाधर टैब आदि)।
स्टीफनक्ट

67

यह MacOS 10.8 पर काम करता है:

sed -E "s/[[:space:]]+/ /g"

2
क्या आप जानते हैं कि यह सभी लिनक्स डिस्ट्रोस पर काम करता है?
उभयलिंगी

2
आम तौर पर, GNU sed में -E नहीं होगा। BSD sed मैन पेज से: "The -E, in-and -i विकल्प गैर-मानक FreeBSD एक्सटेंशन हैं और अन्य ऑपरेटिंग सिस्टम पर उपलब्ध नहीं हो सकते हैं।"
ब्रैड कोच

1
आपको + ऑपरेटर के लिए -E ध्वज की आवश्यकता क्यों है? अधिकांश भाव संभवतः इसके बजाय * के साथ ठीक होंगे, तो यह अन्य प्लेटफार्मों पर काम करेगा।
सैमुअल

5
@ शमूएल यदि आप * का उपयोग करते हैं, तो रेगेक्स शून्य या अधिक स्थानों से मेल खाएगा, और आपको प्रत्येक वर्ण के बीच एक स्थान, और प्रत्येक पंक्ति के प्रत्येक छोर पर एक स्थान मिलेगा। यदि आपके पास -E ध्वज नहीं है, तो आप sed "s/[[:space:]]\+/ /g"एक या अधिक स्थानों से मेल खाना चाहते हैं ।
jbo5112

1
FWIW, NetBSD का सेड -Eफ्लैग को भी सपोर्ट करता है ।
mcandre

13

Sed के कुछ पुराने संस्करण एक सफेद स्पेस मिलान टोकन के रूप में पहचान नहीं सकते हैं। उस स्थिति में आप '[XZ] [XZ] *' के साथ एक या अधिक रिक्त स्थान और टैब के अनुक्रम का मिलान कर सकते हैं जहां X एक स्थान है और Z एक टैब है।


1
तो विशेष रूप से यहाँ की जरूरत के लिए, एक पुराने सेड के साथ, आप कर सकते हैं: $ sed 's / [XZ] [XZ] [XZ] [/ XZ] * / / g' inputfile जहाँ X एक टैब है और Z एक स्पेस है।
मार्निक्स ए। वैन एम्मर्स

10
sed 's/[ \t]*/"space or tab"/'

2
क्या यह किसी sedभी सिस्टम के किसी भी संस्करण पर काम करने की गारंटी है? यदि यह उल्लेख के लायक नहीं है कि यह अन्य उत्तरों की तरह समान तरीके से कहां काम करता है, तो बस हम सीमाओं को जानते हैं और जहां इसका अपेक्षित परिणाम नहीं हो सकता है।
Mokubai

2
यह आरईई है जो मैं व्हाट्सएप से मिलान करने के लिए उपयोग करता हूं। यह केवल टैब या स्थान से मेल खाने के लिए वर्ण वर्गों की तुलना में सरल है। यह नियमित अभिव्यक्ति के केवल सबसे बुनियादी सम्मेलनों का उपयोग करता है, इसलिए इसे नियमित अभिव्यक्ति के कार्यात्मक कार्यान्वयन के साथ कहीं भी काम करना चाहिए।
नैट

3
Mac 10.9.5 पर यह रिक्त स्थान और 't' के लिए मेल खाता है। मैंने व्हॉट्सएप चार्ट से मेल खाने के लिए माइकल डौमा के ऊपर इस्तेमाल किया (यह भी -ई के साथ काम करता है)।
एलियन लाइफ फॉर्म

मेरे SUSE सिस्टम पर समझदारी से काम नहीं करता है। यह उस रेखा पर पहले स्थान से मेल खाता है जहां शून्य या अधिक रिक्त स्थान है, जो पहले चरित्र से पहले है। मुझे संदेह है कि यह इच्छित कार्य है, और निश्चित रूप से अनुरोधित उपयोग मामला नहीं था। मेरा मानना ​​है कि आप प्रति प्रश्न के लिए '*' को '+' (या '\ {3, \}') में बदलना चाहते हैं और शायद पैटर्न की सभी घटनाओं को मिलाने के लिए sed कमांड के अंत में ag डालते हैं। [\ [T] को [[: space:]] के साथ बदलना भी वांछनीय हो सकता है, अगर लाइन में व्हॉट्सएप के लिए कुछ और है।
jbo5112
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.