বড় হাতের অক্ষর থেকে সমস্ত পাঠ্যকে ছোট হাতের মধ্যে এবং বিপরীতে রূপান্তর করে?


17

আমার প্রশ্ন হ'ল আমি কীভাবে সমস্ত পাঠকে বড় হাতের থেকে ছোট হাতের অক্ষরে এবং বিপরীতে রূপান্তর করতে পারি? তা হ'ল সমস্ত চিঠির কেস পরিবর্তন করা। এটি sedকোনওভাবে কোনও প্রতিস্থাপনের সাথে সম্পন্ন করতে হবে ।


4
trচেয়ে আরও উপযুক্ত হবে sed
চোরোবা

উত্তর:


20

এখানে সরাসরি উপায় sed:

$ echo qWeRtY | sed -e 'y/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/'
QwErTy

বা GNU এর সাথে একটি ছোট্ট উপায় sed, এমন কোনও চরিত্রের সাথে কাজ করছে যার জন্য আপনার লোকালে একটি ছোট হাতের অক্ষর <-> বড় হাতের রূপান্তর বিদ্যমান:

$ echo qWeRtY | sed -E 's/([[:lower:]])|([[:upper:]])/\U\1\L\2/g'
QwErTy

আপনি যদি অন্য সরঞ্জামগুলি ব্যবহার করতে পারেন তবে:

perl (ASCII অক্ষরের মধ্যে সীমাবদ্ধ):

$ echo qWeRtY | perl -pe 'y/[a-z][A-Z]/[A-Z][a-z]/'
QwErTy

perl (আরো সাধারণভাবে):

$ echo 'αΒγ' | perl -Mopen=locale -pe 's/(\p{Ll})|(\p{Lu})/uc($1).lc($2)/ge'
ΑβΓ

3
আপনার দ্বিতীয়টি ইনপুটটিতে একটি জিএনইউ sedএবং বিকল্প কেস ধরেছে। sed -re 's/([[:lower:]]?)([[:upper:]]?)/\U\1\L\2/g'পরিবর্তে ব্যবহার করুন (এখনও জিএনইউ নির্দিষ্ট)। প্রথমটি কেবল 26 ASCII লাতিন বর্ণগুলিতে রূপান্তর করে, দ্বিতীয়টি আপনার লোকেলের দ্বারা স্বীকৃত কোনও বর্ণকে রূপান্তর করে। trশুধু হওয়া ASCII লোকেলে জ্ঞান করে তোলে। এটি perlকেবলমাত্র ASCII লাতিন অক্ষরের জন্য কাজ করে।
স্টাফেন চেজেলাস

16

পসিক্সলি, @cuonglm যেমনটি sedআপনি অনূদিত করতে চান এমন সম্পূর্ণ অক্ষরের সম্পূর্ণ সেট সরবরাহ করা ছাড়া এটি করা যায় না

trযদিও এটি দিয়ে সম্পন্ন করা যেতে পারে এবং trএটিই হ'ল (প্রতিলিপি):

tr '[:lower:][:upper:]' '[:upper:][:lower:]'

তবে লিনাক্সে এটির সীমাবদ্ধতা রয়েছে। trলিনাক্স ভিত্তিক সিস্টেমে সাধারণত 3 টি বাস্তবায়ন পাওয়া যায়:

  • GNU- এর সাথে trএটি কেবলমাত্র একক-বাইট অক্ষর সেটগুলির জন্য কাজ করে। উদাহরণস্বরূপ, Stéphane Chazelasইউটিএফ -8 লোকালে, এর sTéPHANE cHAZELASপরিবর্তে দেয় sTÉPHANE cHAZELAS। এটি জিএনইউর একটি সীমাবদ্ধতা tr
  • সঙ্গে trবংশগত দায় toolchest, যে কাজ করে না থেকে (আপনি পেতে stéphane chazelas)।
  • ব্যস্তবক্স যে ধরণের জিনিস trকরবে তা নয়।

ফ্রিবিএসডি-তে যদিও ঠিক আছে। আপনি এটি প্রত্যয়িত ইউনিক্স সিস্টেমেও ঠিকঠাকভাবে কাজ করতে পারবেন বলে আশা করি।


bashশেল যে জন্য একটি ডেডিকেটেড অপারেটর আছে:

in=AbCdE
out=${in~~}

সাথে zsh -o extendedglob:

out=${in//(#b)(([[:lower:]])|([[:upper:]]))/${(U)match[2]}${(L)match[3]}}

ডেস্কটপ দুনিয়ায় কি কেবল ওএসএক্স এটি করে? কেন এটি কাজ করতে পারে না? উচ্চারণকৃত চরটির নিম্নতর কেস সংস্করণ এবং এটি বড় হাতের অংশের মধ্যে হেক্স মানটিতে একটি ধ্রুবক অফসেট রয়েছে বলে মনে হচ্ছে এটি কি ঠিক বিভিন্ন বাস্তবায়ন?

1
@ আলোকিত, ডেস্কটপ ওয়ার্ল্ড বলতে কী বোঝাতে চাইছেন তা নিশ্চিত নন । আফিক্স, সমস্যাটি জিএনইউ নিয়ে, বেশিরভাগ ইউনিয়নে "ডেস্কটপ" রয়েছে। ASCII এবং কিছু iso8859 চরসেট ছাড়াও, আমি সচেতন নই যে আপনি হেক্স অফসেট জিনিসটি সাধারণীকরণ করতে পারবেন, এবং এটি ইউটিএফ -8 এর মতো এনকোডিংগুলির দ্বারা কোনও অর্থ হবে না। ইউটিএফ -8 এ উদাহরণস্বরূপ, বড় হাতের (e2 b4 a0) হ'ল (e1 83 80); i()৯) এবং ı(সি 4 বি 1) উভয়ের ( I49) বড় হাতের অক্ষর হিসাবে রয়েছে (তুর্কি লোকালগুলি যেখানে iহয়ে যায় বাদে İ)। এটি জিএনইউতে কাজ না করার কারণটি trহ'ল জিএনইউ trবাইটের সাথে কাজ করে না অক্ষরগুলির সাথে।
স্টাফেন চেজেলাস

আমি বাছাই মূলধারার কিন্তু এটি বোঝা যায় না সত্যিই তাই মাথা আপ জন্য ধন্যবাদ। আমি কেবল ফরাসি উচ্চারণযুক্ত চরগুলি (এবং সত্যই কেবল "é") দেখলাম এবং এটি খুব সহজেই ভুলে গিয়েছিলাম যে এটি বাইট সম্পর্কে। কিন্তু উত্তরাধিকারী একজন? আমি আবার উত্তরটি পড়তে যাব!

1
@ ইলুমিনÉ, উত্তরাধিকারের জন্য এটি একটি ভিন্ন বিষয়, মনে হচ্ছে এটি কেবলমাত্র একটি ঘটনাকে সমর্থন করে [:lower:]বা [:upper:](সুতরাং প্রথমটি উপেক্ষা করা হবে)। ফরাসি এমনকি œ -> Œহয় c5 93 -> c5 92হল UTF-8 এবং bd -> bciso8859-15 হবে।
স্টাফেন চেজেলাস

2

যদিও এটি ইতিমধ্যে trস্টাফেন চেজেলাস দ্বারা প্রদত্ত সমাধান হিসাবে ইতিমধ্যে উল্লিখিত সীমাবদ্ধতা রয়েছে তবে এটি করার অন্য উপায় এটি:

{   echo QWERTYqwerty | dd conv=lcase
    echo QWERTYqwerty | dd conv=ucase 
} 2>/dev/null

আউটপুট

qwertyqwerty
QWERTYQWERTY

আমি ডাম্প stderrমধ্যে /dev/null, কারণ ddএছাড়াও তার সকল অপারেশন পরিসংখ্যান প্রদান করে 2ফাইল বর্ননাকারী। আপনি যা করছেন তার উপর নির্ভর করে এটি দরকারী হতে পারে তবে এটি এই প্রদর্শনের জন্য নয়। আপনি যে অন্যান্য জিনিসগুলির সাথে করতে পারেন তার সবগুলিই ddএখনও প্রয়োগ হয়, উদাহরণস্বরূপ:

echo QWERTYqwerty | dd bs=1 cbs=6 conv=unblock,ucase 2>/dev/null

আউটপুট:

QWERTY
QWERTY

যদিও এটি কেস অদলবদল করে না (যেমন aBcরূপান্তরিত হয় না AbC)।
স্টাফেন চেজেলাস

1
@ স্টাফেনচেজেলাস - সত্য, তবে যদি আমি ভুল বোঝে না, তবে এটিই প্রশ্ন ছিল না, তাই না?
মাইকজার্ভ

2

যদি আপনার মূল উদ্দেশ্য হ'ল লোয়ারক্লাস থেকে একটি ফাইলকে বড় হাতের ক্লাসে রূপান্তর করা হয় তবে আপনি কেন ব্যবহার করবেন না trএবং STDOUTআপনার ফাইলকে রূপান্তর করবেন:

$cat FILENAME | tr a-z A-Z > FILENAME2

FILENAMEআপনার আসল ফাইলটি কোথায় FILENAME2আপনার রূপান্তরিত আউটপুট ফাইলটি কোথায় ।


এটি উচ্চারণযুক্ত অক্ষরগুলির সাথে কাজ করে না, éউদাহরণস্বরূপ (কমপক্ষে আমার ফাইলে)।
সিগুর

1

ব্যবহার awk:

awk '{print tolower($0)}' file.txt | tee file.txt

আপনি কি নিশ্চিত যে এটি কাজ করবে? >file.txtফাইলটি কেটে দিয়ে শুরু করা হবে
শে

2
তাহলে আপনি অবশ্যই এটি চেষ্টা করেন নি not
স্টাফেন চেজেলাস

0

ruby এর জন্য একটি স্ট্রিং পদ্ধতি রয়েছে, যেমন কমান্ড লাইন থেকে অনুরূপ ব্যবহার perl

$ echo 'qWeRtY' | ruby -pe '$_.swapcase!'
QwErTy

আরও দেখুন রুবি-ডক এনকোডিং

$ ruby -e 'puts Encoding.default_external'
UTF-8
$ echo 'αΒγ'  | ruby -pe '$_.swapcase!'
ΑβΓ

-1

সহজ জিনিস সহজ রাখুন। অক্ষর অনুবাদ করতে ডিজাইন করা ফিল্টারটি হ'ল tr

echo 1ude1UDE | tr [:upper:][:lower:] [:lower:][:upper:]

1
এটি একটি ভাঙ্গা (কারণ বিশ্বজুড়ে অপারেটরগুলির চারপাশে নিখোঁজ উক্তিগুলির) সংস্করণটি ইতিমধ্যে 2 বছর আগে দেওয়া উত্তরটির
স্টাফেন চেজেলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.