`গ্রেপাতে হেক্সাডেসিমাল কোড ব্যবহার করে অক্ষরগুলি কীভাবে নির্দিষ্ট করা যায়?


27

আমি হেক্সাডেসিমাল কোড 0900 (এ এর পরিবর্তে) থেকে 097F (ভের পরিবর্তে) এর জন্য গ্রেপ অক্ষর সেট পরিসীমা করতে নিম্নলিখিত কমান্ডটি ব্যবহার করছি। আমি এবং এ এর ​​জায়গায় হেক্সাডেসিমাল কোডটি কীভাবে ব্যবহার করতে পারি?

bzcat archive.bz2 | grep -v '<[अ-व]*\s' | tr '[:punct:][:blank:][:digit:]' '\n' | uniq | grep -o '^[अ-व]*$' | sort -f | uniq -c | sort -nr | head -50000 | awk '{print "<w f=\""$1"\">"$2"</w>"}' > hindi.xml

আমি নিম্নলিখিত আউটপুট পেতে:

    <w f="399651">और</w>
    <w f="264423">एक</w>
    <w f="213707">पर</w>
    <w f="74728">कर</w>
    <w f="44281">तक</w>
    <w f="35125">कई</w>
    <w f="26628">द</w>
    <w f="23981">इन</w>
    <w f="22861">जब</w> 
    ...

আমি উপরের কমান্ডে অ এবং ও এর পরিবর্তে হেক্সাডেসিমাল কোডটি ব্যবহার করতে চাই।

যদি হেক্সাডেসিমাল কোড ব্যবহার করা মোটেই সম্ভব না হয় তবে আমি কি অক্ষর সেট ('अ-व') জন্য হেক্সাডেসিমাল কোডের পরিবর্তে ইউনিকোড ব্যবহার করতে পারি?

আমি উবুন্টু 10.04 ব্যবহার করছি


1
"কাজ না করা" মানে কি? এছাড়াও -vম্যাচ inverts আপনার প্রশ্নের লেখা থেকে মনে হচ্ছে যে নয় কি আপনি চান।
খ্রিস্টান.কে ২

@ খ্রিস্টান.কে বিলম্বের জন্য দুঃখিত ... আমি প্রশ্নটি সম্পাদনা করেছি, দয়া করে একবার দেখুন।

আমি এখনও একটি উপযুক্ত উত্তরের জন্য অপেক্ষা করছি। :(
ধ্রুবো ভট্টাচার্য

উত্তর:


21

তাকান এই প্রশ্নের

পাঠ্যটি সাধারণত ইউটিএফ -8 এ এনকোড থাকে; সুতরাং আপনাকে utf-8 এনকোডিংয়ে ব্যবহৃত বাইটের হেক্স ভেল ব্যবহার করতে হবে।

grep "["$'\xe0\xa4\x85'"-"$'\xe0\xa4\xb5'"]"

এবং

grep '[अ-व]'

সমান, এবং তারা লোকেল-ভিত্তিক মিলটি সম্পাদন করে (যা মিলনটি দেবনাগরী স্ক্রিপ্টের বাছাইয়ের নিয়মের উপর নির্ভরশীল ( অর্থাত্ ম্যাচিংটি "\ u0905 এবং \ 0935 এর মধ্যে কোনও চর নয় " তবে পরিবর্তে "দেবনাগরির মধ্যে কিছু বাছাই করে" এ এবং দেবনাগরী ভিএ "; সেখানে পার্থক্য থাকতে পারে।

অন্যদিকে, আপনার কাছে এটি (নোট-পি) রয়েছে:

grep -P "\xe0\xa4[\x85-\xb5]"

এটি সেই বাইট মানগুলির সাথে বাইনারি মিলবে ।


2
অনুগ্রহ করে উপসর্গ "["$'এবং প্রত্যয়টি ব্যাখ্যা করুন"]"
জোনাথন কোমার

6

শেল পলায়ন যথেষ্ট হলে আপনি $'\xHH'এই জাতীয় বাক্য গঠনটি ব্যবহার করতে পারেন :

grep -v "<["$'\x09\x00'"-"$'\x09\x7F'"]*\s"

আপনার ব্যবহারের ক্ষেত্রে এটি কি যথেষ্ট?


echo 'अ-व' | hdআমাকে দেয়e0 a4 85 - e0 a4 b5
enzotib

প্রকৃতপক্ষে ওপি ইউটিএফ -8 এনকোডিংয়ে হেক্সাডেসিমাল ডাম্প নয়, ইউনিকোডের মান দিয়েছে: - / যেহেতু grepকোনও লিবার সাথে লিঙ্কযুক্ত নয়, আমি অনুমান করি যে গ্রেপ দ্বারা পরিসর রূপান্তরটি করা সম্ভব নয়: - /
স্টাফেন গিমেনেজ ২

1
বিটিডব্লিউ, zshব্যাখ্যা করতে সক্ষম "\u0900"এবং "\u097F", তবে আচরণটি ইউটিএফ -8 এনকোডেড রেঞ্জের উপর নির্ভর করবে অবিচ্ছিন্ন (সম্ভবত এটি)।
স্টাফেন গিমেনেজ

কোনও গ্রেপ-ভি "<[" $ '\ x09 \ x00' "" - "$ '\ x09 \ x7F'"] * \ গুলি "নীচে আউটপুট দেয় <wf =" 16929 "> x </w> <wf =" 10995 "> এফ </ w> <wf =" 2548 "> এফএফ </ w> <wf =" 762 "> এফএফএফএফএফ </ w> <wf =" 655 "> এফএফএফএফ </ w> <wf =" 266 " > xx </w> <wf = "215"> এফএফএফ </ w> <wf = "117"> এক্সএক্সএক্স </ w> .... এটি প্রত্যাশিত নয়। :(, আমি কি হেক্সাডেসিমাল কোড বা চরিত্রের সেট ('অ-ভ') এর পরিবর্তে ইউনিকোড ব্যবহার করতে পারি?
ধ্রুব ভট্টাচার্জি

6

0x0900আপনার লেখা "হেক্সাডেসিমাল" মানটি হ'ল ইউনিকোড কোড পয়েন্টের মান যা হেক্সাডেসিমালে।

হেক্সাডেসিমাল কোড 0900 (এর পরিবর্তে)

আমি বিশ্বাস করি যে আপনি কি বলতে চাওয়ার কথা বলছেন হেক্সাডেসিমেল ইউনিকোড কোড বিন্দু হল: U0905

ইউ-0900 এ চরিত্র এক আপনি ব্যবহার নয়:
এই অক্ষরটি ইউ0905 , এই ইউনিকোড পৃষ্ঠার অংশ , বা এই পৃষ্ঠায় তালিকাভুক্ত ।

ইন bash(উবুন্টুতে ডিফল্টরূপে ইনস্টল করা), বা সরাসরি প্রোগ্রামটির সাথে: /usr/bin/printf(তবে shপ্রিন্টফের সাথে নয় ), একটি ইউনিকোড অক্ষরটি তৈরি করা যেতে পারে:

$ printf '\u0905'

$ /usr/bin/printf '\u0905'

যাইহোক, সেই চরিত্রটি, যা একটি কোড পয়েন্ট নম্বর থেকে আসে তা কোন কোড পৃষ্ঠাটি ব্যবহৃত হয় তার উপর নির্ভর করে বেশ কয়েকটি বাইট স্ট্রিমগুলি উপস্থাপন করতে পারে।
এটি সুস্পষ্ট যে হওয়া উচিত \U0905নয় 0x09 0x05হল UTF-16 (UCS-2, ইত্যাদি) মধ্যে
এবং 0x00 0x00 0x09 0x05হল UTF-32।
এটি সুস্পষ্ট নাও হতে পারে তবে utf-8 এ এটি প্রতিনিধিত্ব করে 0xe0 0xa4 0x85:

$ /usr/bin/printf '\u0905' | od -vAn -tx1
e0 a4 85

যদি আপনার কনসোলের লোকেল এর অনুরূপ কিছু হয় en_US.UTF-8

এবং আমি শেলের কথা বলছি কারণ এটিই একটি যা স্ট্রিংটিকে রূপান্তর করে যা অ্যাপ্লিকেশন গ্রহণ করে। এই:

grep "$(printf '\u0905')" file

আপনার প্রয়োজনীয় চরিত্রটি গ্রেপ "দেখুন" করে তোলে।
উপরের লাইনটি বুঝতে আপনি ইকো ব্যবহার করতে পারেন:

$ echo grep "$(printf '\u0905')" file
grep  file

তারপরে, আপনার অনুরোধ অনুসারে আমরা একটি অক্ষর পরিসর তৈরি করতে পারি:

$ echo grep "$(printf '[\u0905-\u097f]')" file
grep [अ-ॿ] file

এটি আপনার প্রশ্নের উত্তর:

আমি এবং এ এর ​​জায়গায় হেক্সাডেসিমাল কোডটি কীভাবে ব্যবহার করতে পারি?


এটি এখন পর্যন্ত সেরা উত্তর --- এটি শেলটিতে ইউনিকোড পয়েন্টের উপস্থাপনার বিষয়টি স্পষ্টভাবে সম্বোধন করে এবং হেক্স কোডগুলির মধ্যে কীভাবে পিছনে এগিয়ে যায় তা দেখায়।
স্টেফানো

2

আমরা নন-এস্কি ওপেন ডাবল উক্তি এবং ডাবল উদ্ধৃতিটিকে নিয়মিত ডাবল কোট (") এ রূপান্তর করতে চেয়েছিলাম Also

তাদের ফাইলটিতে দেখতে (উবুন্টু বাশ শেল):

$ grep -P "\x92" infile.txt  (single)
$ grep -P "\x93" infile.txt  (open double)
$ grep -P "\x94" infile.txt  (close double)

তাদের অনুবাদ:

$ /bin/sed "s/\x92/'/g" a.txt > b.txt
$ /bin/sed 's/\x93/"/g' b.txt > c.txt
$ /bin/sed 's/\x94/"/g' c.txt > d.txt
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.