কীভাবে UTF-8 txt ফাইলগুলিকে ব্যাশের সমস্ত বড় আকারে রূপান্তর করতে হবে?


10

আমার কাছে কিছু ইউটিএফ -8। টেক্সট ফাইল রয়েছে যা আমি সমস্ত বড় হাতের কাছে রূপান্তর করতে চাই। এটি কেবল ASCII হলে আমি ব্যবহার করতে পারতাম:

tr [:lower:] [:upper:]

তবে যেহেতু আমি ডায়াক্রিটিক্স এবং স্টাফ নিয়ে কাজ করছি তাই মনে হচ্ছে এটি কাজ করে না। আমার ধারণা আমি যদি উপযুক্ত লোকেল সেট করি তবে এটি কাজ করতে পারে তবে আমার এই স্ক্রিপ্টটি পোর্টেবল হওয়ার দরকার।

উত্তর:


14

সব:

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

(উদ্ধৃতি ভুলবেন না, অন্যথায় করবে না কাজ আছে একটি ফাইল নামক যদি :, l, ... অথবা rবর্তমান ডিরেক্টরির মধ্যে) অথবা:

awk '{print toupper($0)}'

বা:

dd conv=ucase

বর্তমান লোকালে সংজ্ঞায়িত বিধি অনুসারে অক্ষরগুলি বড় হাতের অক্ষরে রূপান্তর করতে বোঝানো হয়। তবে, যেখানে লোকালগুলি ইউটিএফ -8 অক্ষর সেট হিসাবে ব্যবহার করে এবং ছোট হাত থেকে বড় হাতের রূপান্তরকে স্পষ্টভাবে সংজ্ঞায়িত করে, কমপক্ষে জিএনইউ dd, জিএনইউ trএবং mawk( awkউদাহরণস্বরূপ উবুন্টুতে ডিফল্ট ) সেগুলি অনুসরণ করে না। এছাড়াও, ছাড়াও বা অন্যান্য লোকেলগুলি নির্দিষ্ট করার কোনও মানক উপায় নেই , সুতরাং আপনি যদি ইউটিএফ -8 ফাইলগুলিকে বর্তমানের লোকাল নির্বিশেষে বৃহত আকারে রূপান্তর করতে চান, তবে আপনি স্ট্যান্ডার্ড টুলকেষ্টের ভাগ্যের বাইরে চলে যাবেন না।CPOSIX

প্রায়শই, বহনযোগ্যতার জন্য, আপনার সেরা বাজি পার্ল হতে পারে:

$ echo lľsšcčtťzž | PERLIO=:utf8 perl -pe '$_=uc'
LĽSŠCČTŤZŽ

এখন, আপনাকে সচেতন করা দরকার যে সকলেই একটি নির্দিষ্ট চরিত্রের বড় হাতের সংস্করণ কী তা নিয়ে একমত নয়।

উদাহরণস্বরূপ, তুর্কি লোকালগুলিতে বড় হাতের অক্ষর iনয় I, তবে İ( <U0130>)। এখানে trGNU টিআর পরিবর্তে উত্তরাধিকারী সরঞ্জামচেষ্টার সাথে :

$ echo ií | LC_ALL=C.UTF-8 tr '[:lower:]' '[:upper:]'
IÍ
$ echo ií | LC_ALL=tr_TR.UTF-8 tr '[:lower:]' '[:upper:]'
İÍ

আমার সিস্টেম অন, perlটু-ঊর্ধ্ব রূপান্তর সংজ্ঞায়িত করা হয় /usr/share/perl/5.14/unicore/To/Upper.pl, এবং আমি মনে করি যে গনুহ libc থেকে কয়েকটি অক্ষর উপর ভিন্নভাবে আচরণ করবে toupper()মধ্যে C.UTF8উদাহরণস্বরূপ লোকেল, perlআরো সঠিক হচ্ছে। উদাহরণ হিসেবে বলা যায় perlসঠিকভাবে ধর্মান্তরিত ɀ করার Ɀ , গনুহ libc (2.17) না।


এর মূল্য কী, তার জন্য আমি চেক অক্ষরের সাথে কাজ করছি (এবং আপনি যে উদাহরণটি ব্যবহার করেছেন তা আসলে স্লোভাক), যেখানে সমস্ত বড় হাতের অক্ষর স্পষ্টভাবে সংজ্ঞায়িত করা হয়, তবে স্থানীয় সেট সম্ভবত সি হবে এবং চেক নয় যাতে সমস্যা হয়। পার্ল ইতিমধ্যে এই সরঞ্জামচইনে ব্যবহৃত হয়েছে, সুতরাং অন্য ব্যবহার যুক্ত করা খুব খারাপ নাও হতে পারে। বিস্তারিত ব্যাখ্যার জন্য ধন্যবাদ, বিটিডব্লিউ!
ভিপিয়ারিক

3

আমি মনে করি আপনি এটি awkএবং এটির toupperকার্যকারিতা সহ এটি করতে পারেন ।

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

জিএনইউ নিয়ে কাজ করে না tr:

$ echo lľsšcčtťzž | tr '[:lower:]' '[:upper:]'
LľSšCčTťZž

জিএনইউ নিয়ে কাজ করে awk:

$ echo lľsšcčtťzž | awk '{ print toupper($0) }'
LĽSŠCČTŤZŽ

@ স্টাফেনচাজেলাস - ধন্যবাদ আমি ব্যর্থতার উদাহরণটি বদলেছি।
slm

যা বর্তমান লোকেল এবং উপর নির্ভর করে trবা awkবাস্তবায়ন। উদাহরণস্বরূপ, trকোনও ইউটিএফ 8 লোকালে উপস্থিত লোকাল অনুসারে , বেশিরভাগই সঠিকভাবে চরিত্রকে রূপান্তরিত করবে, জিএনইউ trতা করবে না। mawkনা।
স্টাফেন চেজেলাস

1
প্রকৃতপক্ষে, ফ্রিবিএসডি (9.1) এ, এটি অন্যভাবে। এটি নিয়ে কাজ করে trতবে এর সাথে নয়awk
স্টাফেন চেজেলাস

@ স্টাফেনচাজেলাস - আমি 8- এর রূপগুলিতে পারদর্শী নই) কেউ মাত্র অবনমিত, অবাক কেন?
slm

2

এটি ওএস এক্স এর সাথে কাজ করে trতবে জিএনইউয়ের সাথে নয় tr:

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

এটি এর gawkসাথে mawkবা এর সাথে নয় nawk(যা /usr/bin/awkওএস এক্সে রয়েছে):

awk '{print toupper($0)}'

আর একটি বিকল্প হ'ল জিএনইউ ব্যবহার করা sed:

sed 's/./\u&/g'

বাশ ৪.০ এবং তারপরে আপনি ^^প্যারামিটার সম্প্রসারণও ব্যবহার করতে পারেন :

while IFS= read -r l;do printf %s\\n "${l^^}";done
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.