এটি সহজ রাখা - লেজ
কেবল অক্ষর গণনা করার জন্য আমাদের নিয়মিত প্রকাশ বা একাধিক প্রক্রিয়া হওয়া উচিত নয়। প্রায়শই একটি ফাইলের শেষ লাইনগুলি প্রদর্শন করতে ব্যবহৃত
কমান্ডটিতে একটি বিকল্প ( ) থাকে যা এটির জন্য সঠিক সরঞ্জাম বলে মনে হচ্ছে:tail
-c
--bytes
$ printf 123456789 | tail -c 3
789
(আপনি যখন শেল পড়ে থাকবেন তখন মাইক্রোভারের উত্তরের মতো কোনও পদ্ধতি ব্যবহার করা বোধগম্য হবে কারণ এটি প্রক্রিয়া শুরু করার জন্য সংরক্ষণ করে tail
))
রিয়েল ইউনিকোডের অক্ষর?
এখন, আপনি শেষ তিনটি অক্ষর জিজ্ঞাসা করেছেন ; এই উত্তরটি আপনাকে যা দেয় তা নয়: এটি শেষ তিনটি বাইট ছাড়িয়ে যায় !
যতক্ষণ না প্রতিটি চরিত্র একটি বাইট হয় tail -c
কেবল কাজ করে। সুতরাং এটি ব্যবহার করা যেতে পারে যদি অক্ষর সেট হয় ASCII
, ISO 8859-1
বা বৈকল্পিক হয়।
আপনার যদি সাধারণ UTF-8
বিন্যাসের মতো ইউনিকোড ইনপুট থাকে তবে ফলাফলটি ভুল:
$ printf 123αβγ | tail -c 3
�γ
এই উদাহরণস্বরূপ, UTF-8
গ্রীক অক্ষর আলফা, বিটা এবং গামা দুটি বাইট দীর্ঘ:
$ printf 123αβγ | wc -c
9
বিকল্পটি -m
কমপক্ষে প্রকৃত ইউনিকোড অক্ষর গণনা করতে পারে:
printf 123αβγ | wc -m
6
ঠিক আছে, সুতরাং শেষ 6 বাইট আমাদের শেষ 3 অক্ষর দেবে:
$ printf 123αβγ | tail -c 6
αβγ
সুতরাং, tail
সাধারণ অক্ষরগুলি পরিচালনা করার পক্ষে সমর্থন করে না এবং এটি চেষ্টাও করে না (নীচে দেখুন): এটি পরিবর্তনশীল আকারের লাইনগুলি পরিচালনা করে, তবে কোনও ভেরিয়েবল আকারের অক্ষরগুলিকে পরিচালনা করে না।
আসুন এটি এইভাবে রাখুন: tail
সমস্যার সমাধানের কাঠামোর পক্ষে ঠিক সঠিক, তবে ডেটা ধরণের জন্য ভুল।
জিএনইউ কোর্টিলস
আরও খুঁজছি, এটা দেখা যাচ্ছে যে তোমাকে গনুহ coreutils, মৌলিক সরঞ্জাম সংগ্রহ পছন্দ sed
, ls
, tail
এবং cut
, এখনো সম্পূর্ণরূপে আন্তর্জাতিকিকরনকৃত করা হয় না। যা মূলত ইউনিকোডকে সমর্থন করার বিষয়ে।
উদাহরণস্বরূপ, cut
অক্ষর সমর্থনের জন্য এখানে লেজের পরিবর্তে ব্যবহার করা ভাল প্রার্থী হবে; এটিতে বাইট বা চরগুলি নিয়ে কাজ করার বিকল্প রয়েছে, -c
( --bytes
) এবং -m
( --chars
);
সংস্করণ , 2013 হিসাবে কেবলমাত্র -m
/
তা বাস্তবায়িত হয়নি!--chars
cut (GNU coreutils) 8.21
থেকে info cut
:
`-c CHARACTER-LIST'
`--characters=CHARACTER-LIST'
Select for printing only the characters in positions listed in CHARACTER-LIST.
The same as `-b' for now, but internationalization will change that.
এই উত্তরটি দেখুন ইউটিএফ -8 এর সাথে `কাট-সি` (` --characters`) ব্যবহার করতে পারবেন না? ।
grep -o '.\{3\}$'