“অবৈধ বাইট ক্রম” এর অভিযোগ টিআর


24

আমি ইউনিক্সের জন্য একেবারে নতুন এবং আমি নিজেকে কিছু কমান্ড শেখানোর জন্য কर्क ম্যাকএলহারনের "দ্য ম্যাক ওএস এক্স কমান্ড লাইন" ব্যবহার করছি।

আমি ব্যবহার করার চেষ্টা করছি trএবং grepযাতে আমি নিয়মিত এমএস-অফিস ওয়ার্ড ডকুমেন্টে পাঠ্য স্ট্রিংগুলি অনুসন্ধান করতে পারি।

$ tr '\r' '\n' < target-file | grep search-string

তবে এটির সমস্ত ফিরে আসে:

Illegal byte sequence.

robomechanoid:Position-Paper-Final-Draft robertjralph$ tr '\r' '\n' < Position-Paper-Final-Version.docx | grep DeCSS
tr: Illegal byte sequence
robomechanoid:Position-Paper-Final-Draft robertjralph$ 

আমি আসলে আমার তৈরি স্ক্রিপ্টে একই লাইনটি চালিয়েছি viএবং এটি অনুসন্ধানটি সঠিকভাবে করে।


আমি দেখতে পাচ্ছি না কেন টিআর অভিযোগ করবে, আপনি যেমন প্রশ্নটিতে লিখেছিলেন তেমন টাইপ করেছেন? গ্রেপ আপনি যা চান তা পাবেন না, এক্সডোক একটি খারাপ সংজ্ঞাযুক্ত মান। এই ফাইলগুলিতে কী রয়েছে তা সত্যই কেউ জানে না, লোকেরা এটিকে বিপরীত করেছে, দৃশ্যত মানটির কোনও লাভ হয়নি।
ctrl-alt-delor

উত্তর:


29

grepএকটি পাঠ্য প্রক্রিয়াজাতকরণ সরঞ্জাম। এটি তাদের ইনপুটটি পাঠ্য ফাইল হিসাবে প্রত্যাশা করে । দেখে মনে হচ্ছে trএটি ম্যাকোস- এ একই রকম হয় (যদিও trবাইনারি ফাইলগুলি সমর্থন করার কথা মনে করা হয়)।

কম্পিউটারগুলি বাইটের ক্রম হিসাবে ডেটা সঞ্চয় করে । একটি পাঠ্য হ'ল অক্ষরের ক্রম। বাইট হিসাবে অক্ষরগুলি এনকোড করার বিভিন্ন উপায় রয়েছে, যা অক্ষর এনকোডিংস বলে । বিশ্বের বেশিরভাগ ক্ষেত্রে বিশেষত ওএসএক্স - এ ডি-ফ্যাক্টো স্ট্যান্ডার্ড চরিত্রের এনকোডিংটি ইউটিএফ -8 , যা ইউনিকোড অক্ষর সেটের জন্য একটি এনকোডিং । কেবলমাত্র 256 টি সম্ভাব্য বাইট রয়েছে তবে মিলিয়ন ইউনিকোডের বেশি অক্ষর রয়েছে তাই বেশিরভাগ অক্ষর একাধিক বাইট হিসাবে এনকোড করা থাকে। ইউটিএফ -8 একটি পরিবর্তনশীল দৈর্ঘ্যের এনকোডিং: চরিত্রের উপর নির্ভর করে, একটি অক্ষর এনকোড করতে এক থেকে চার বাইট লাগতে পারে। বাইটের কিছু সিকোয়েন্স ইউটিএফ -8 এর কোনও অক্ষরকে উপস্থাপন করে না। সুতরাং, বাইটের ক্রম রয়েছে যা বৈধ ইউটিএফ -8 পাঠ্য ফাইল নয়।

trএটি অভিযোগ করছে কারণ এটি এমন একটি বাইট ক্রমের মুখোমুখি হয়েছিল। এটি ইউটিএফ -8 এ এনকোডযুক্ত একটি পাঠ্য ফাইলটি দেখতে প্রত্যাশা করে তবে এটি বাইনারি ডেটা দেখে যা বৈধ ইউটিএফ -8 নয়।

মাইক্রোসফ্ট ওয়ার্ড নথি কোনও পাঠ্য ফাইল নয়: এটি একটি ওয়ার্ড প্রসেসিং ডকুমেন্ট। ওয়ার্ড প্রসেসিং ডকুমেন্ট ফর্ম্যাটগুলি কেবল টেক্সটকেই এনকোড করে না, তবে ফর্ম্যাটিং, এম্বেড করা চিত্র ইত্যাদি The

আপনি লোকেল পরিবর্তন করে বাইট চালনাতে পাঠ্য প্রক্রিয়াজাতকরণ সরঞ্জামকে নির্দেশ দিতে পারেন । বিশেষত, "সি" স্থানীয় নির্বাচন করুন, যার মূল অর্থ "কিছুই অভিনব নয়"। কমান্ড লাইনে, আপনি পরিবেশের ভেরিয়েবলগুলির সাথে লোকেল সেটিংস চয়ন করতে পারেন ।

export LC_CTYPE=C
tr '\r' '\n' < target-file | grep search-string

এটি কোনও ত্রুটি ছাড়বে না, তবে এটি কার্যকর কোনও কাজ করবে না যেহেতু target-fileএখনও একটি বাইনারি ফাইল যা সম্ভবত আপনি নির্দিষ্ট করেছেন এমন বেশিরভাগ অনুসন্ধানের স্ট্রিং থাকতে পারে না।

ঘটনাক্রমে, tr '\r' '\n'ম্যাক ওএস 9 বা ততোধিক বয়সী পাঠ্য ফাইলগুলি না ফেলে থাকলে কোনও কার্যকর কমান্ড নয়। \r(ক্যারেজ রিটার্ন) ম্যাক ওএস এক্সের আগে ম্যাক ওএসে নতুন লাইন বিভাজক ছিল। ওএসএক্সের পর থেকে, নতুন লাইন বিভাজক \n(লাইন ফিড, ইউনিক্স স্ট্যান্ডার্ড) এবং পাঠ্য ফাইলগুলিতে ক্যারিজ রিটার্ন থাকে না। উইন্ডোজ লাইন বিরতির প্রতিনিধিত্ব করতে দ্বি-চরিত্রের ক্রম সিআর-এলএফ ব্যবহার করে; tr -d '\r'উইন্ডোজ পাঠ্য ফাইলটিকে ইউনিক্স / লিনাক্স / ওএসএক্স পাঠ্য ফাইলে রূপান্তরিত করে।

সুতরাং আপনি কমান্ড লাইন থেকে একটি ওয়ার্ড ডকুমেন্টে কীভাবে অনুসন্ধান করতে পারেন? একটি .docxওয়ার্ড ডকুমেন্ট আসলে একটি হয় zip সংরক্ষণাগার বিভিন্ন ফাইল, প্রধান বেশী হচ্ছে ধারণকারী এক্সএমএল

unzip -l Position-Paper-Final-Version.docx

ম্যাক ওএস এক্সের মধ্যে জিপ ফাইলগুলি অনুসন্ধান করার জন্য জিপগ্রিপ ইউটিলিটি অন্তর্ভুক্ত ।

zipgrep DeCSS Position-Paper-Final-Version.docx

ফলাফল খুব পঠনযোগ্য হবে না কারণ ডকএক্স ফর্ম্যাটে এক্সএমএল ফাইলগুলি বেশিরভাগ ক্ষেত্রে একটি বিশাল লাইন নিয়ে থাকে। আপনি যদি নথির মূল বডি পাঠ্যের ভিতরে সন্ধান করতে চান word/document.xmlতবে সংরক্ষণাগার থেকে ফাইলটি বের করুন । নোট করুন যে নথির পাঠ্য ছাড়াও এই ফাইলটিতে এক্সএমএল মার্কআপ রয়েছে যা নথির কাঠামোর প্রতিনিধিত্ব করে। আপনি এক্সএমএল মার্কআপটিকে sedম্যানেজযোগ্য লাইনে বিভক্ত করতে কিছুটা ম্যাসাজ করতে পারেন ।

unzip -p Position-Paper-Final-Version.docx word/document.xml |
sed -e 's/></>\n</g' |
grep DeCSS

1
ভাল সংক্ষিপ্তসার এবং অতিরিক্ত বিটের জন্য +1। যদিও আমি বলার একটি জিনিস আছে। এক্সএমএল ফর্ম্যাট করতে, আপনি xml_ppএটি xml-twig-toolsডেবিয়ান গ্নু + লিনাক্সের প্যাকেজে ব্যবহার করতে পারেন (কোনও ম্যাক জানেন না)।
ctrl-alt-delor

2
ম্যাক ২০১১ এর জন্য এক্সেল সিএসভি ফাইলগুলিকে \ r লাইন শেষের সাথে সংরক্ষণ করে তাই এই ট্রির অনুরোধটি আসলে প্রাসঙ্গিক এবং দরকারী।
নোহ ইয়েটার

1
আপনি যখন কোনও ট্যাব সীমিত যোগাযোগের তালিকা রফতানি করেন তখন ম্যাক 2011 এর জন্য আউটলুকের মতোই।
ইভান এক্স

1
ঠিক আছে, এটিকে কমিয়ে আনার মতো যথেষ্ট খ্যাতি আমার নেই, তবে এই উত্তরটি একেবারেই ভুল। এটি " tr[...] দিয়ে তাদের ইনপুটটি পাঠ্য ফাইল হওয়ার প্রত্যাশা করে " দিয়ে শুরু হয় ; যখন পসিক্স স্পেসিফিকেশন স্পষ্টভাবে জানিয়েছে "স্ট্যান্ডার্ড ইনপুট কোনও প্রকারের ফাইল হতে পারে" " । দয়া করে আপনার উত্তরটি সংশোধন করুন।
7heo.tk

@ 7heo.tk "এই উত্তর একদম ভুল" একটি স্থূল exageration, কিন্তু তুমি ঠিক আছে, trহয় অনুমিত বাইনারি ইনপুট প্রক্রিয়া (বিশেষত, এটি প্রক্রিয়া নাল সঠিকভাবে বাইট অনুমিত এর)। যদিও পসিক্স স্পষ্টভাবে নির্দিষ্ট করে না যে কীভাবে অক্ষরের অনুক্রম নয় এমন ইনপুটটি নিয়ে ডিল করার কথা। (আমি যদি একজন প্রয়োগকারী হয়ে থাকি তবে আমি অশোধিত (বা এগুলি সরিয়ে দিয়ে -s) অবৈধ বাইট সিকোয়েন্সগুলি পাস করতাম এবং মানক কমিটির সাথে একটি ত্রুটি বাড়িয়ে তুলতাম)) স্পষ্টতই, ম্যাকোসের টিআর তাদের সম্পর্কে অভিযোগ করে।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন' ২

13

আমি মনে করি লোকেলগুলি থেকে আপনার চর্যাপটি ইউটিএফ -8, যাতে বাইনারি ফাইলগুলিতে আপনার সমস্যা হয়। কেবল সি লোকালে স্যুইচ করুন:

LC_ALL=C tr '\r' '\n' < target-file | LC_ALL=C grep search-string

আপনি দুবার ভাষা উল্লেখ না করার জন্য বন্ধনী ব্যবহার করতে পারেন। LC_ALL=C ( tr '\r' '\n' < target-file | grep search-string )। তবে ডকএক্স সি স্থানীয় নয়। এটি ইউটিএফ 16 এবং জিপড এবং জটিল এবং যে কারও অনুমান। আমি এমন একটি সরঞ্জাম ব্যবহার করে দেখতে চাই যা এটির রূপান্তর করতে পারে যা আপনি আলাদা আলাদা ফর্ম্যাটে রূপান্তর করতে পারেন যা আপনি এইচটিএমএল বা বিজোড়কে প্রক্রিয়া করতে পারেন (বৈধতাটিও জিপড, তবে ভালভাবে সংজ্ঞায়িত করা এবং ব্যাখ্যা করা সহজ)।
ctrl-alt-delor

1
বন্ধনী (প্রথম বন্ধনী) সহ সিনট্যাক্সটি সমস্ত শেলের সাথে কাজ করে না (বাশ নয়, জেডশ নয়, ড্যাশ নয়)। তারপরে, এমএস ওয়ার্ড ফাইল সম্পর্কিত, এটি নির্ভর করে। আমার এমন কিছু ফাইল রয়েছে যেখানে stringsকমান্ডটি পরিষ্কার পাঠ্য দেয়।
ভিঙ্ক 17

বিকল্পভাবে, ( export LC_ALL=C; tr '\r' '\n' < target-file | grep search-string; )কাজ করা উচিত।
ভিঙ্ক 17

1
stringsসুপার পাওয়ার রয়েছে: এটি এমন ফাইলগুলি পড়তে পারে যা কেবল utf-8 বা ascii পাঠ্য নয়।
ctrl-alt-delor

()আমি যে জিনিসটি ভেবেছিলাম যে এটি কাজ করবে সে সম্পর্কে দুঃখিত , একটি সমাধানের জন্য @ ভিনক 17 ধন্যবাদ।
ctrl-alt-delor
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.