उपयोग sed -e "s/[[:space:]]\+/ /g"
यहाँ एक स्पष्टीकरण है:
[ # start of character class
[:space:] # The POSIX character class for whitespace characters. It's
# functionally identical to [ \t\r\n\v\f] which matches a space,
# tab, carriage return, newline, vertical tab, or form feed. See
# https://en.wikipedia.org/wiki/Regular_expression#POSIX_character_classes
] # end of character class
\+ # one or more of the previous item (anything matched in the brackets).
अपने प्रतिस्थापन के लिए, आप केवल एक स्थान सम्मिलित करना चाहते हैं। [:space:]
एक चरित्र वर्ग के लिए एक संक्षिप्त नाम के बाद से वहाँ काम नहीं करेगा और regex इंजन को पता नहीं होगा कि किस चरित्र को वहाँ रखा जाए।
+
क्योंकि sed के regex इंजन के साथ regex में भाग निकले किया जाना चाहिए +
एक सामान्य चरित्र जबकि है \+
'एक या अधिक' के लिए एक metacharacter है। मास्टेरिंग रेगुलर एक्सप्रेशंस के पेज 86 पर , जेफरी फ्रीडल ने एक फुटनोट में उल्लेख किया है कि एड और ग्रीप कोष्ठक से बचते थे क्योंकि "केन थॉम्पसन नियमित रूप से महसूस करते थे कि इसका उपयोग मुख्य रूप से सी कोड के साथ काम करने के लिए किया जाएगा, जहां कच्चे कोष्ठक से मिलान करने की आवश्यकता बैकरेफ्रेंसिंग की तुलना में अधिक सामान्य होगी। । " मुझे लगता है कि उसने प्लस साइन के बारे में उसी तरह महसूस किया, इसलिए इसे मेटाचैकर के रूप में उपयोग करने के लिए इसे बचने की आवश्यकता है। इससे उलझना आसान है।
में sed आप से बचने के लिए की आवश्यकता होगी +
, ?
, |
, (
, और )
। या उपयोग -r विस्तारित रेगेक्स का उपयोग करने के लिए (तब ऐसा दिखता है sed -r -e "s/[[:space:]]\+/ /g"
याsed -re "s/[[:space:]]\+/ /g"