অ-এসকিআই (ইউনিকোড) অক্ষর সম্পর্কে কীভাবে ট্র সচেতন করবেন?


36

আমি ফাইল (ইউটিএফ -8) থেকে কিছু অক্ষর সরিয়ে দেওয়ার চেষ্টা করছি। আমি trএই উদ্দেশ্যে ব্যবহার করছি :

tr -cs '[[:alpha:][:space:]]' ' ' <testdata.dat 

ফাইলটিতে কিছু বিদেশী অক্ষর রয়েছে (যেমন "Латвийская" বা "àé")। trএগুলি বুঝতে পারে বলে মনে হয় না: এটি তাদের অ-আলফা হিসাবে বিবেচনা করে এবং খুব সরিয়ে দেয়।

আমি আমার স্থানীয় কিছু সেটিংস পরিবর্তন করার চেষ্টা করেছি:

LC_CTYPE=C LC_COLLATE=C tr -cs '[[:alpha:][:space:]]' ' ' <testdata.dat
LC_CTYPE=ru_RU.UTF-8 LC_COLLATE=C tr -cs '[[:alpha:][:space:]]' ' ' <testdata.dat
LC_CTYPE=ru_RU.UTF-8 LC_COLLATE=ru_RU.UTF-8 tr -cs '[[:alpha:][:space:]]' ' ' <testdata.dat

দুর্ভাগ্যক্রমে, এর কোনওটিই কাজ করেনি।

আমি কীভাবে trইউনিকোড বুঝতে পারি?

উত্তর:


29

এটি GNU বাস্তবায়নের সীমাবদ্ধতা ( 1 , 2 , 3 , 4 , 5 , 6 ) tr

এটি বিদেশী , অ-ইংরাজী বা অ-এসকিআইআই অক্ষরকে সমর্থন করে না এমনটি নয়, তবে এটি বহু-বাইট অক্ষরকে সমর্থন করে না।

এই সিরিলিক অক্ষরগুলি ঠিকঠাক হিসাবে বিবেচিত হবে, যদি iso8859-5 (প্রতিটি চরিত্রের একক বাইট) অক্ষর সেট (এবং আপনার লোকেল সেই অক্ষরটি ব্যবহার করছিল) তে লেখা থাকে তবে আপনার সমস্যাটি হ'ল আপনি ইউটিএফ -8 ব্যবহার করছেন যেখানে অ-এএসসিআইআই নেই অক্ষরগুলি 2 বা ততোধিক বাইটে এনকোড করা হয়।

গনুহ এর পেয়েছিলাম একটি পরিকল্পনা (দেখুন এছাড়াও ) সমাধান যে এবং কাজের উপায় বয়সী কিন্তু এখনো।

ফ্রিবিএসডি বা সোলারিসের trসমস্যা নেই।


গড় সময়ে, বেশিরভাগ ব্যবহারের ক্ষেত্রে trআপনি জিএনইউ সেড বা জিএনইউ অ্যাডকে ব্যবহার করতে পারেন যা মাল্টি-বাইট অক্ষরকে সমর্থন করে।

উদাহরণস্বরূপ, আপনার:

tr -cs '[[:alpha:][:space:]]' ' '

লেখা যেতে পারে:

gsed -E 's/( |[^[:space:][:alpha:]])+/ /'

বা:

gawk -v RS='( |[^[:space:][:alpha:]])+' '{printf "%s", sep $0; sep=" "}'

লোয়ার এবং আপার কেস ( tr '[:upper:]' '[:lower:]') এর মধ্যে রূপান্তর করতে :

gsed 's/[[:upper:]]/\l&/g'

(এটি lছোট Lনয়, 1অঙ্ক নয়)।

বা:

gawk '{print tolower($0)}'

বহনযোগ্যতার জন্য, perlঅন্য বিকল্প:

perl -Mopen=locale -pe 's/([^[:space:][:alpha:]]| )+/ /g'
perl -Mopen=locale -pe '$_=lc$_'

যদি আপনি জানেন যে ডেটাটি একটি একক বাইট চরিত্রের সেটটিতে উপস্থাপন করা যায়, তবে আপনি এটি অক্ষরে এটি প্রসেস করতে পারেন:

(export LC_ALL=ru_RU.iso88595
 iconv -f utf-8 |
   tr -cs '[:alpha:][:space:]' ' ' |
   iconv -t utf-8) < Russian-file.utf8

1
ট্রাম সম্পর্কে তথ্যের কারণে আমি আপনার প্রশ্নটি গ্রহণ করেছি। আমি সমস্যাটি সমাধান করেছি, এবং কীভাবে এটি সমাধান করা যায় সে সম্পর্কে প্রশ্ন সরিয়ে নিয়েছি (যাতে টিআরের সন্ধানকারী লোকেরা কেবল টিআর সম্পর্কিত তথ্য পাবেন, কিছু স্বেচ্ছাসেবী সমস্যা নয়)। আপনি যদি দয়া করে সমাধানটিও সরিয়ে ফেলতে পারেন, যেহেতু এটির আর দরকার নেই, তাই আমি কৃতজ্ঞ be
ম্যাথিউরক

3
@ ম্যাথেররক আমি এটি রেখে দিয়েছি তবে এটিকে উচ্চারণ করেছি এবং আরও জেনেরিক তৈরি করেছি কারণ আশেপাশে কোনও শব্দ দেওয়া একই সমস্যার লোকদের পক্ষে উপকারী হবে।
স্টাফেন চেজেলাস

আপনি কোথায় পাবেন যে সিরিলিক (প্রথাগতভাবে) আইএসও 8859-5 এ এনকোডযুক্ত রয়েছে? আপনি কি ইউনিকোড ব্যতিরেকে কোনও রাশিয়ান পাঠ্য দেখতে পেয়েছেন?
ইনকনিস মিসেসি

9
@ ইন্নিসনস্মিরসি, এখানে যে সমস্ত বিষয় রয়েছে তা হ'ল আইএসও 8859-5 হ'ল সিরিলিক চরিত্রগুলির মধ্যে sin সিজ-বাইট চার্সেটগুলির মধ্যে একটি। এটি ব্যাপকভাবে ব্যবহৃত হোক বা না হোক এখানে অপ্রাসঙ্গিক। আপনার যদি কোনও উপায়ে KOI-R বা উইন্ডো -1121 চরসেট সহ লোকেল থাকে তবে পরিবর্তে এটি ব্যবহার করুন।
স্টাফেন চেজেলাস

ওয়েবে ইন্নিসিসমিরসি রাশিয়ান প্রায় সবসময় ইউটিএফ -8 (বা মাঝে মাঝে উইন্ডোজ -১৫১১ এ) এনকোড করা থাকে তবে কেবলমাত্র আমরা প্রথম থেকেই বহু একক-বাইট এনকোডিংয়ের ব্যথা অনুভব করেছি। এখানে একটি (অ-কার্যকরী) এনকোডিং স্যুইচার সহ একটি প্রাচীন (সারকা 1998) ওয়েব পৃষ্ঠা রয়েছে: sch57.ru/collect
অ্যালেক্স শপিলকিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.