ফাইলটিতে স্ট্রিং প্যাটার্নটি সন্ধান করার সময় গ্রেপ "বাইনারি ফাইল (স্ট্যান্ডার্ড ইনপুট) ম্যাচগুলি" দেয়


70

আমি উবুন্টুতে আছি এবং আমি টাইপ করেছি cat .bash_history | grep gitএবং এটি ফিরে আসল

বাইনারি ফাইল (স্ট্যান্ডার্ড ইনপুট) মেলে

আমার bash_historyউপস্থিতি রয়েছে এবং এর মধ্যে অনেকগুলি লাইন রয়েছে যা দিয়ে শুরু হয় git

কী কারণে এই ত্রুটিটি প্রদর্শিত হয়েছিল এবং আমি কীভাবে এটি সংশোধন করতে পারি?


file .bash_history( file ~/.bash_history) এর আউটপুট কি ?
হিমাইল

আউটপুট.bash_history: data
answerSeeker

কোনও কারণে এটি আমার অ্যাপাচি লগগুলির সাথে ঘটেছিল।
প্রশ্নোত্তর

খুব ঘনিষ্ঠভাবে সম্পর্কিত: unix.stackexchange.com/q/19907/5510
ট্রেভর বয়ড স্মিথ

উত্তর:


11

সম্ভবত ফাইলটি .bash_historyঅ-পাঠ্য ডেটা দিয়ে শুরু হয়, সুতরাং grepফাইলটিকে বাইনারি হিসাবে বিবেচনা করা হচ্ছে। এটি file .bash_historyআউটপুট দ্বারা নিশ্চিত করা হয়েছে :

.bash_history: data 

আপনি একটি মাননীয় দর্শন পেতে শুরু থেকে কয়েক বাইট পড়তে পারেন:

head -c1K .bash_history 

এখানে আমি প্রথম 1 কিবি পড়ছি।

আপনি STDOUT টি পাইপ করতে পারেন hexdump/ odবা অনুরূপ।


পার্শ্ব নোট হিসাবে grep, ফাইলের নাম (গুলি) আর্গুমেন্ট হিসাবে গ্রহণ করে, তাই catএখানে অকেজো; শুধু কর:

grep git .bash_history

head -c1k .bash_historyগ্রেপ সমস্যাটি কীভাবে সমাধান করা যায় তা আমি এখনও নিশ্চিত নই , আমার .bash_history ফাইলের প্রথম 38 টি লাইন পড়ুন। সবকিছুই পঠনযোগ্য ছিল
সন্ধানকারী

2
@ তাতকাইওয়াসুমির ফলাফল grep -a git .bash_historyকী?
হেইমাইল

1
যে কাজ! আমি এটি থেকে যা চেয়েছিলাম তা পেয়েছি। কি করে -a?
সিকার

6
@TatakaiWasumi -aতোলে grepবাইনারি হিসাবে ফাইল চিকিত্সা।
হিমাইল

3
-aকরতে grepএকটি বাইনারি ফাইল প্রক্রিয়া যেমন যদি এটা টেক্সট ছিলেন।
লাশগার

127

আপনি ব্যবহার করতে পারেন grep -a 'pattern'

থেকে মানুষ, grep পৃষ্ঠা:

-a, --text
Process a binary file as if it were text; this is equivalent to the ‘--binary-files=text’ option.

-zপতাকাটি বেশ কয়েকটি লাইন জুড়ে মেলানোর জন্য এটি আমাকে সহায়তা করেছে ।
স্ট্রাগু

এই প্রশ্নের এই প্রশ্নের জন্য সেরা হতে হবে।
মাইকেল পাচেকো

হ্যাঁ এই উত্তরটি অনেক বেশি উপযুক্ত!
ডেওয়ালকার

3

আমি আজ এই প্রশ্নটি দেখেছি, কারণ যখন আমি গ্রেপ করতে চাই তখন আমারও একই সমস্যা ছিল .bash_history। (ছোট্ট দ্রষ্টব্য: আমি আমার ইতিহাসের নামকরণ করেছি, যাতে একটি নতুন তৈরি হয় This এই নতুন ইতিহাসকে বাইনারি হিসাবে বিবেচনা করা হয়নি))

@ হাইমাইলে উত্তরে বলা হয়েছে, এটি grepফাইলের নাম নেয় এবং catঅকেজো হবে। এই সম্পূর্ণ সত্য নয়। থেকে grepগুলি মানুষ পৃষ্ঠা:

যদি কোনও ফাইল নির্দিষ্ট না করা থাকে, বা যদি ফাইলটি "-" দেওয়া হয়, গ্রেপ স্ট্যান্ডার্ড ইনপুট অনুসন্ধান করে।

সুতরাং আপনি এটি ব্যবহার catএবং পাইপ করতে পারে grep। তবে এটি .bash_historyবাইনারি হিসাবে বিবেচিত সমস্যাটি সমাধান করে না । একমাত্র সঠিক জিনিসটি ব্যবহার করা grep -a(আপনি @ grepইতিহাসের উত্তর থেকে পছন্দ করুন) আপনি সরাসরি ইতিহাসের সাথে বা catপাইপ কিনা ।


cat .bash_history | grep -a git

অথবা

grep -a git .bash_history


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