বিশেষ অক্ষর NUL (^ @ ^ @ ^ @) এর জন্য কীভাবে গ্রেপ করবেন


26

ফাইল:

O000000667520994000000074720121112000000N^@^@^@ 

আমি নীচের কমান্ডটি ব্যবহার করেছি তবে এটি কার্যকর হয় না।

grep "^@^@^@" *
linux  unix 

উত্তর:


52

আপনি তার হেক্স কোড দ্বারা পার্ল-রিজেক্সপ মোডে (-পি) কন্ট্রোল / অ-মুদ্রণযোগ্য অক্ষর সহ যে কোনও অক্ষরের জন্য গ্রেপ করতে পারেন:

grep -Pa '\x00' ...

5
আপনি -aবিকল্প যুক্ত করতে চাইতে পারেন , অন্যথায় grepএটি বাইনারি ডেটা মনে করে এবং ম্যাচিং লাইনগুলি প্রদর্শন করবে না।
এমপি

ফাইলটিতে কেবলমাত্র ASCII = 0 বাইট রয়েছে কিনা তা পরীক্ষা করার কোনও উপায় আমি খুঁজে পাচ্ছি না grep -Pv '\x00' file...
সাইগউইনে

@ এমপি ছাড়া -a(কখনও কখনও?) এটি প্যাটার্নটিও খুঁজে পায় না। ধন্যবাদ! @ Pbies পাশাপাশি সহায়তা করতে পারে।
মিশেল ডি রুইটার

13

^@এটি ক্যারেট ^এবং স্বাক্ষর নয় @, এটি একটি চরিত্র। এটি কিছু প্রোগ্রাম NUL অক্ষর প্রদর্শন করে — ASCII মান 0, \0সি হিসাবেও পরিচিত It's

এখানে আমি এটিতে একটি NUL বাইট সহ একটি ফাইল তৈরি করেছি। লক্ষ্য করুন যে আমি cat -vমুদ্রণবিহীন অক্ষরগুলি প্রদর্শন করতে ব্যবহার করি ।

$ cat -v blah
hello
null^@
hi
$ hexdump -C blah
00000000  68 65 6c 6c 6f 0a 6e 75  6c 6c 00 0a 68 69 0a     |hello.null..hi.|
0000000f

সিপিতে স্ট্রিং বন্ধ করতে ব্যবহৃত হওয়ায় গ্রেপকে এনইউলগুলি খুঁজে পেতে সমস্যা হয় তবে যাইহোক, কাজটি করতে পারেন:

$ sed -n '/\x0/p' blah
null
$ sed -n '/\x0/p' blah | cat -v
null^@

সালে ষষ্ঠ, সন্নিবেশ করুন মোড সংবাদ মাধ্যমে Ctrl- V, Ctrl- Shift- @একটি নাল বাইট সন্নিবেশ করতে।


3

যদি grep -Pকাজ না করে (যেমন ওএস এক্সে), তবে এটি ব্যবহার করে দেখুন:

grep -E '\x00' ...

আপনি কি নিশ্চিত যে এটি কাজ করে? আমি আমার সংস্করণটি দিয়ে নেই:
গ্রেপ

3
এই উত্তরটি বিএসডি grep -Pa '\x00' ...
গ্রেপের

1

ব্যাশ আপনি বিশেষ অক্ষর যখন প্রিফিক্স যোগ করতে পারেন C-qবা C-v। সুতরাং আপনি উদাহরণস্বরূপ পারেন

grep 'Ctrl-vCtrl-a' file.txt

অনুসন্ধান স্ট্রিং হিসেবে পড়তে হবে control key+ + character v, দ্বারা অনুসরণ control key+ + character a, যা হওয়া ASCII মান SOH (01) জন্য অনুসন্ধান। দুর্ভাগ্যক্রমে এটি NUL চরিত্রের জন্য কাজ করে না।


সম্ভবত আপনি প্রকৃতপক্ষে এই জাতীয় অক্ষর ক্রমটি অক্ষরে অক্ষরে লেখা উচিত নয়, তবে পরিবর্তে কীবোর্ডে যুক্তিযুক্তভাবে প্রবেশ করা উচিত?
মনিকার সাথে হালকাতা রেস

হ্যা অবশ্যই. এটি কন্ট্রোল কীটি ধরে রাখা হয়, ভি টিপুন, তারপরে নিয়ন্ত্রণ কী ধরে রাখুন, একটি টিপুন।
ওলাফ ডিয়েটশে

আমি মনে করি এটি আপনার উত্তরে অস্পষ্ট।
মনিকার সাথে লাইটনেস রেস

ইঙ্গিতটির জন্য ধন্যবাদ। আমি উত্তরে স্পষ্ট করার চেষ্টা করেছি।
ওলাফ ডিয়েটশে

সম্পাদনা করার জন্য ধন্যবাদ মনে হয় আমার আরও সাহায্যের দিকে নজর দেওয়া উচিত ছিল।
ওলাফ ডিয়েটশে

-2

^ @ হল নুল চরিত্র। এতে থাকা ফাইলগুলির লাইনগুলি দিয়ে আপনি কী করতে চান?

আপনি /programming/2398393/uthorfying- এবং-removing-null-characters-in-unix এ দেখতে পারেন যা একই ধরণের সমস্যার সাথে সম্পর্কিত।


-3

চরিত্র ^ @ হ'ল নুল চর, সুতরাং আমি আশঙ্কা করি যে এটি সরাসরি গ্রেপ করা যায় না।

আপনার সেরা বিকল্পটি সম্ভবত একটি সাধারণ প্রোগ্রাম লিখতে হবে যা বাইটগুলির এই ক্রমটি অনুসন্ধান করে।

অন্যথায় আপনি এটি হেক্সাডেসিমেল ডাম্প (কিছু ফর্ম মধ্যে রূপান্তর করতে চেষ্টা করতে পারেন od, xxdতাই বা) এবং grep এটা আউটপুট মধ্যে। তবে খোলামেলাভাবে বললে, এটি সঠিকভাবে পাওয়া শক্ত হবে।

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