উত্তর:
এখানে সরাসরি উপায় 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'
ΑβΓ
sedএবং বিকল্প কেস ধরেছে। sed -re 's/([[:lower:]]?)([[:upper:]]?)/\U\1\L\2/g'পরিবর্তে ব্যবহার করুন (এখনও জিএনইউ নির্দিষ্ট)। প্রথমটি কেবল 26 ASCII লাতিন বর্ণগুলিতে রূপান্তর করে, দ্বিতীয়টি আপনার লোকেলের দ্বারা স্বীকৃত কোনও বর্ণকে রূপান্তর করে। trশুধু হওয়া ASCII লোকেলে জ্ঞান করে তোলে। এটি perlকেবলমাত্র ASCII লাতিন অক্ষরের জন্য কাজ করে।
পসিক্সলি, @cuonglm যেমনটি sedআপনি অনূদিত করতে চান এমন সম্পূর্ণ অক্ষরের সম্পূর্ণ সেট সরবরাহ করা ছাড়া এটি করা যায় না ।
trযদিও এটি দিয়ে সম্পন্ন করা যেতে পারে এবং trএটিই হ'ল (প্রতিলিপি):
tr '[:lower:][:upper:]' '[:upper:][:lower:]'
তবে লিনাক্সে এটির সীমাবদ্ধতা রয়েছে। trলিনাক্স ভিত্তিক সিস্টেমে সাধারণত 3 টি বাস্তবায়ন পাওয়া যায়:
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]}}
ⴠ(e2 b4 a0) হ'ল Ⴠ(e1 83 80); i()৯) এবং ı(সি 4 বি 1) উভয়ের ( I49) বড় হাতের অক্ষর হিসাবে রয়েছে (তুর্কি লোকালগুলি যেখানে iহয়ে যায় বাদে İ)। এটি জিএনইউতে কাজ না করার কারণটি trহ'ল জিএনইউ trবাইটের সাথে কাজ করে না অক্ষরগুলির সাথে।
[:lower:]বা [:upper:](সুতরাং প্রথমটি উপেক্ষা করা হবে)। ফরাসি এমনকি œ -> Œহয় c5 93 -> c5 92হল UTF-8 এবং bd -> bciso8859-15 হবে।
যদিও এটি ইতিমধ্যে 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)।
যদি আপনার মূল উদ্দেশ্য হ'ল লোয়ারক্লাস থেকে একটি ফাইলকে বড় হাতের ক্লাসে রূপান্তর করা হয় তবে আপনি কেন ব্যবহার করবেন না trএবং STDOUTআপনার ফাইলকে রূপান্তর করবেন:
$cat FILENAME | tr a-z A-Z > FILENAME2
FILENAMEআপনার আসল ফাইলটি কোথায় FILENAME2আপনার রূপান্তরিত আউটপুট ফাইলটি কোথায় ।
éউদাহরণস্বরূপ (কমপক্ষে আমার ফাইলে)।
ব্যবহার awk:
awk '{print tolower($0)}' file.txt | tee file.txt
>file.txtফাইলটি কেটে দিয়ে শুরু করা হবে
ruby এর জন্য একটি স্ট্রিং পদ্ধতি রয়েছে, যেমন কমান্ড লাইন থেকে অনুরূপ ব্যবহার perl
$ echo 'qWeRtY' | ruby -pe '$_.swapcase!'
QwErTy
আরও দেখুন রুবি-ডক এনকোডিং
$ ruby -e 'puts Encoding.default_external'
UTF-8
$ echo 'αΒγ' | ruby -pe '$_.swapcase!'
ΑβΓ
সহজ জিনিস সহজ রাখুন। অক্ষর অনুবাদ করতে ডিজাইন করা ফিল্টারটি হ'ল tr।
echo 1ude1UDE | tr [:upper:][:lower:] [:lower:][:upper:]
trচেয়ে আরও উপযুক্ত হবেsed।