ব্যবহার 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:]
সেখানে কাজ করবে না যেহেতু এটি একটি অক্ষর শ্রেণীর জন্য সংক্ষেপণ এবং রেজেক্স ইঞ্জিনটি জানতে পারে না যে সেখানে কোন অক্ষর রাখতে হবে।
+
কারণ sed এর Regex ইঞ্জিন Regex মধ্যে পলান করা আবশ্যক +
একটি স্বাভাবিক চরিত্র যেহেতু হয় \+
'এক বা একাধিক' এর জন্য একটি metacharacter হয়। মাস্টারিং রেগুলার এক্সপ্রেশনের ৮ 86 পৃষ্ঠায় জেফ্রি ফ্রেইড একটি পাদটীকাতে উল্লেখ করেছেন যে এড এবং গ্রেপ পলায়নযোগ্য বন্ধনী ব্যবহার করেছেন কারণ "কেন থম্পসন মনে করেছিলেন নিয়মিত প্রকাশগুলি সি কোডের সাথে প্রাথমিকভাবে কাজ করতে ব্যবহৃত হত, যেখানে কাঁচা বন্ধনীর সাথে ম্যাচ করার প্রয়োজন ব্যাকরফেরেন্সিংয়ের চেয়ে বেশি সাধারণ হবে where । " আমি ধরে নিয়েছি যে প্লাস সাইন সম্পর্কে তিনি একইরকম অনুভূত হয়েছিল, তাই এটি একটি মেটাচ্যারাক্টর হিসাবে ব্যবহার করার জন্য এড়াতে হবে। এটির দ্বারা বিভক্ত হওয়া সহজ।
ইন sed আপনি অব্যাহতি প্রয়োজন হবে +
, ?
, |
, (
, এবং )
। বা প্রসারিত রেজেক্স ব্যবহার করতে -r ব্যবহার করুন (তারপরে এটি দেখতে sed -r -e "s/[[:space:]]\+/ /g"
বা এর মতো দেখাবে)sed -re "s/[[:space:]]\+/ /g"