সদৃশ অক্ষরগুলি কীভাবে সরাবেন?


18

যদি আমার মতো একটি লাইন থাকে:

Thhiisss iisss mmyyy nameeee

আমি এটিকে প্রিন্ট করতে চাই:

This is my name

এর জন্য ইউনিক্স আদেশ কী?


নকলগুলি এবং পছন্দসই আউটপুটটির উত্স সম্পর্কে আপনি আরও কিছু প্রসঙ্গ সরবরাহ করতে পারেন? "এম্মি নামি আইসিস জেসেসসিয়েইইইইআই" যদি হয়?
পাওলো আলমেদা

উত্তর:


24

সাথে tr:

echo "Thhiisss iisss mmyyy nameeee" | tr -s 'a-z'

ব্যাখ্যা: "সঙ্কুচিত" পুনরাবৃত্তি অক্ষরগুলির -sস্যুইচ tr। দেখানো হিসাবে, সুইচ অক্ষরের একটি পরিসীমা সঙ্গে ব্যবহার করা যেতে পারে: aথেকে z


2
কমান্ডটির কিছু ব্যাখ্যা ভবিষ্যতের পাঠকদের জন্য সহায়ক হতে পারে।
গিক

8

একটি জিএনইউ সিস্টেমে আপনাকে ব্যবহার করতে sedবা অনুরূপ ব্যবহার করতে হবে যদি আপনার লোকেল মাল্টিবাইট অক্ষর ব্যবহার করে ( জিম্মিজের পরামর্শ অনুসারে ) কারণ জিএনইউ trকেবল প্রতি বাইটে একটি অক্ষর উল্লেখ করতে পারে। একটি ASCII লোকালে আপনি ডাব্লু / পছন্দ মতো সমস্ত নকল মুছে ফেলতে trপারেন:

LC_ALL=C tr -s '\0-\255' <input

তাই ...

echo Thhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '\0-\255'

... কপি করে প্রিন্ট ...

This is my name

আপনি পরিসীমা দ্বারা আপনার লক্ষ্যগুলি উল্লেখ করে বাছাই করে এটি করতে পারেন:

echo TThhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '\101-\132'

... অথবা ...

echo TTTThhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '[:upper:]'

... যা একই জিনিস হিসাবে কাজ করে, এবং যা উভয় মুদ্রণ:

Thhiisss iisss mmyyy nameeee

... অথবা ব্যবহার [:punct:], [:digit:], [:lower:], [:alpha:]অথবা আপনি চাই যাই হোক না কেন। আপনি নির্বাচনটি W / -cso উপেক্ষাও করতে পারেন ...

echo 'TTTThhiisss     iisss mmyyy nameeee' |
LC_ALL=C tr -cs '[:upper:]'

... কপি করে প্রিন্ট ...

TTTThis is my name

7

এর সাথে একটি উপায় sed:

sed ':X;s/\(.\)\1/\1/g;tX'

বা এমনকি সহজ:

sed 's/\(.\)\1*/\1/g'

( মন্তব্যের জন্য কস্টাস এবং মাইকজার্ককে ধন্যবাদ )


sed 's/\(.\)\1\+/\1/g'
কস্টাস

3

চেষ্টা করুন tr:

echo "Thhiisss iisss mmyyy nameeee" | tr -s 'hismye'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.