উত্তর:
এখানে সরাসরি উপায় 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) উভয়ের ( I
49) বড় হাতের অক্ষর হিসাবে রয়েছে (তুর্কি লোকালগুলি যেখানে i
হয়ে যায় বাদে İ
)। এটি জিএনইউতে কাজ না করার কারণটি tr
হ'ল জিএনইউ tr
বাইটের সাথে কাজ করে না অক্ষরগুলির সাথে।
[:lower:]
বা [:upper:]
(সুতরাং প্রথমটি উপেক্ষা করা হবে)। ফরাসি এমনকি œ -> Œ
হয় c5 93 -> c5 92
হল UTF-8 এবং bd -> bc
iso8859-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
।