সেডে নাল বাইট (␀, NUL, \ 0) সনাক্ত করার কোনও উপায় আছে কি?


15

অন্য একটি প্রশ্নের সাথে সম্পর্কিত , বাইনারি ফাইলগুলিকে অস্পষ্টভাবে সনাক্ত করতে, সেখানে ␀ বাইটগুলি সনাক্ত করার কোনও উপায় আছে sed?


জিএনইউ সেডে, হ্যাঁ, তবে নোট করুন যে অনেকগুলি ইউনিটে টেক্সট ইউটিলিটিগুলি নাল বাইটগুলি পরিচালনা করতে সক্ষম নয়।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

উত্তর:


17

উদাহরণ:

প্রমাণ করুন যে আমি একটি নূতন বাইট পাঠাচ্ছি, তার পরে একটি নতুন লাইন:

$ echo -e \\0 | hexdump -C
00000000  00 0a                                             |..|
00000002

এখন আমি NUL বাইটকে একটি !বিস্মৃত চিহ্ন হিসাবে পরিবর্তন করেছি :

$ echo -e \\0 | sed 's/\x00/!/' | hexdump -C
00000000  21 0a                                             |!.|

সুতরাং কৌশলটি \x00নুল-বাইট হিসাবে ব্যবহার করছে ।


3
আপনি echo -ne \\0একটি নতুন লাইন এড়াতে পারেন ।
l0b0

প্রতিস্থাপন hexdump -Cসঙ্গে uniname -bcepuযা দেখতে চরিত্র এটা ডাম্প।
l0b0

6
এটি উল্লেখ করা উচিত যে \xএটি একটি মানহীন sedএক্সটেনশন, তবে জিএনইউsed এটি সরবরাহ করে।
jw013

6
এটিও উল্লেখ করা উচিত, এটি echo -eএকটি বাশিজমprintfঅনেক বেশি সামঞ্জস্যপূর্ণ।
জোফেল

7

হ্যাঁ, প্যাটার্নটি \x00নাল বাইটের সাথে মেলে।

উদাহরণ:

$ printf "\0\n\0\n" > file
$ sed -e 's/\x00/test/' -i file
$ cat file
test
test
$  

@ l0b0: কারণটি কেন এটি আমার পক্ষে কাজ করেছিল তা হ'ল আমি zsh ব্যবহার করেছি। পসিক্সের মতে \0এটি শূন্য বাইট দ্বারা প্রতিস্থাপিত হয়। এই প্রতিস্থাপনের প্রয়োজন নেই ("সমর্থিত হবে"), এবং প্রকৃতপক্ষে বাশ সরাসরি এটি সমর্থন করে না। এটির জন্য, আপনাকে ব্যবহার করা দরকার echo -e। আমি আমার উত্তরে এর echoসাথে প্রতিস্থাপন printfকরেছি যা আরও সুসংগত বলে মনে হচ্ছে ...
জোফেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.