সেডে হোয়াইটস্পেস কীভাবে মেলে?


218

আমি সেডে হোয়াইটস্পেসের সাথে কীভাবে মিল করব? আমার ডেটাতে আমি 3+ পরবর্তী সমস্ত সাদা স্পেস অক্ষর (ট্যাব স্পেস) এর সাথে সব মিলিয়ে 2 স্পেস দিয়ে প্রতিস্থাপন করতে চাই। কিভাবে এই কাজ করা যেতে পারে?

উত্তর:


226

চরিত্র শ্রেণী \sহোয়াইটস্পেস অক্ষর ম্যাচ হবে <tab>এবং <space>

উদাহরণ স্বরূপ:

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

দুটি স্পেস সহ কমপক্ষে 3 সাদা স্পেসগুলির প্রতিটি ক্রমকে প্রতিস্থাপন করবে।


রেকর্ড : পসিক্স কমপ্লায়েন্সের জন্য, [[:space:]]পরিবর্তে অক্ষর শ্রেণিটি ব্যবহার করুন \s, যেহেতু পরেরটি জিএনইউ সেড এক্সটেনশন। জন্য POSIX বিশেষ উল্লেখ দেখুন কিন্তু এবং BREs


5
আহা! এটি আমার কাছে অনুপস্থিত সুইচ ছিল।
সিকোয়া এমসিডোওয়েল

25
আমাকে '-r' স্যুইচটিও যুক্ত করতে হয়েছিল যা প্রসারিত রেজেক্সকে '' s 'কে স্থান হিসাবে চিহ্নিত করতে সক্ষম করে।
হাব

39
অ্যাপলের সাথে sedআমাকে ব্যবহার করতে হয়েছিল [[:space:]]কারণ \sআমার পক্ষে কাজ করে না। সম্ভবত \sএকটি জিএনইউ সেড এক্সটেনশন?
জ্যারেড বেক

2
@ জ্যারেডব্যাক ধন্যবাদ, আমার সাধারণ রেজেক্স কেন কাজ করছে না এমন ধারণাগুলি বাদ দিয়েছিল .. এটি খোঁড়া, আমি ভেবেছিলাম \ গুলি স্ট্যান্ডার্ড এক্সটেন্ডেড রেজেক্স .. এছাড়াও -আর কাজ করেননি এবং -আমি স্কোয়াট করেননি
কার্তিক টি

3
এর পরিবর্তে এমন কোনওটি [[:space:]ব্যবহার করতে পারে [[:blank:]]যা কেবলমাত্র অনুভূমিক ট্যাব এবং স্পেসগুলির সাথে মেলে (তবে কোনও নতুন লাইন, উল্লম্ব ট্যাব ইত্যাদি নয়)।
স্টেফ্যান্ট

67

এটি MacOS 10.8 এ কাজ করে:

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

2
আপনি কি জানেন যে এটি সমস্ত লিনাক্সের ডিস্ট্রোজে কাজ করে?
উভচর

2
সাধারণত নয়, জিএনইউ শেড -E থাকবে না। বিএসডি সেড ম্যান পৃষ্ঠা থেকে: "-ই, -a এবং -i বিকল্পগুলি মানহীন ফ্রিবিএসডি এক্সটেনশান এবং অন্য অপারেটিং সিস্টেমে উপলভ্য নাও হতে পারে।"
ব্র্যাড কোচ

1
+ অপারেটরের জন্য আপনার কেন-ই পতাকা লাগবে? পরিবর্তে * দিয়ে বেশিরভাগ এক্সপ্রেশন সম্ভবত ভাল থাকে, তবে এটি অন্যান্য প্ল্যাটফর্মগুলিতে কাজ করবে।
শমূয়েল

5
@ সামুয়েল আপনি যদি * ব্যবহার করেন তবে রেজেক্স শূন্য বা আরও বেশি জায়গার সাথে মিলবে এবং আপনি প্রতিটি চরিত্রের মধ্যে একটি স্থান এবং প্রতিটি লাইনের প্রতিটি প্রান্তে একটি স্থান পাবেন। যদি আপনার কাছে -E পতাকা না থাকে তবে আপনি sed "s/[[:space:]]\+/ /g"এক বা একাধিক স্পেস মেলাতে চান ।
jbo5112

1
এফডব্লিউআইডাব্লু, নেটবিএসডি এর সেড -Eপতাকাটিকেও সমর্থন করে ।
ম্যাকান্দ্রে

13

সেডের কিছু পুরানো সংস্করণ শ্বেত স্পেসের সাথে ম্যাচিং টোকেন হিসাবে স্বীকৃত হতে পারে না। সেক্ষেত্রে আপনি '[XZ] [XZ] *' এর সাথে এক বা একাধিক স্পেস এবং ট্যাবগুলির ক্রম মেলাতে পারেন যেখানে এক্স একটি স্থান এবং জেড একটি ট্যাব।


1
সুতরাং এখানে বিশেষ প্রয়োজনের জন্য, একটি পুরানো সেড সহ, আপনি এটি করতে পারেন: $ সেডস / / এক্সজেড] [এক্সজেড] [এক্সজেড] [এক্সজেড] * / / জি 'ইনপুট ফাইল যেখানে এক্স একটি ট্যাব এবং জেড একটি স্থান।
মার্নিক্স এ। ভ্যান আমার্স

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

2
এটি কি sedকোনও সিস্টেমে কোনও সংস্করণে কাজ করার গ্যারান্টিযুক্ত ? যদি তা না হয় তবে এটি অন্যান্য উত্তরগুলির মতো একই ফ্যাশনে কোথায় কাজ করে তা উল্লেখ করার মতো হতে পারে, কেবলমাত্র আমরা সীমাবদ্ধতাগুলি জানি এবং যেখানে এর উদ্দেশ্য ফলাফল হতে পারে না।
মকুবাই

2
এই আরই হ'ল হোয়াইটস্পেসের সাথে মিলে যা ব্যবহার করি। কেবল ট্যাব বা স্পেসের সাথে মেলে এটি অক্ষর শ্রেণীর চেয়ে সহজ simp এটি নিয়মিত এক্সপ্রেশনগুলির মধ্যে কেবলমাত্র সর্বাধিক প্রাথমিক সম্মেলনগুলি ব্যবহার করে, তাই এটি নিয়মিত প্রকাশের কার্যকরী বাস্তবায়নের সাথে যে কোনও জায়গায় কাজ করা উচিত।
Nate

3
ম্যাক 10.9.5 এ এই স্পেস এবং 'টি' এর সাথে মেলে। আমি মাইকেল ডৌমার উপরের সাদা অংশের অক্ষরের সাথে মেলে (এটি -e এর সাথেও কাজ করে)।
এলিয়েন লাইফ ফর্ম

আমার সু সিস্টেমটিতে সংবেদনশীলভাবে কাজ করে না। এটি শূন্য বা তারও বেশি স্পেস রয়েছে এমন লাইনের প্রথম স্থানটির সাথে মিলছে, যা প্রথম চরিত্রের আগে। আমি সন্দেহ করি যে এটি উদ্দেশ্যযুক্ত ফাংশন, এবং অবশ্যই অনুরোধযুক্ত ব্যবহারের কেস ছিল না। আমি বিশ্বাস করি আপনি '' + '(অথবা প্রশ্ন অনুসারে' \ {3, \} ') এর জন্য' * 'পরিবর্তন করতে চান এবং প্যাটার্নের সমস্ত উপস্থিতি মেলে সেড কমান্ডের শেষে এজি করতে পারেন। [: T] কে [[:: স্থান:]] এর সাথে প্রতিস্থাপন করাও পছন্দসই হতে পারে, যদি লাইনে সাদা অংশের জন্য অন্য কিছু থাকে is
jbo5112
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.