क्या तलछट में अशक्त बाइट्स (N, NUL, \ 0) का पता लगाने का एक तरीका है?


15

एक और सवाल से संबंधित , द्विआधारी फ़ाइलों का पता लगाने के लिए, क्या question बाइट्स का पता लगाने का एक तरीका है sed?


GNU sed में, हाँ, लेकिन ध्यान दें कि कई यूनियनों पर, टेक्स्ट यूटिलिटीज़ null बाइट्स को संभालने में सक्षम नहीं हैं।
गिल्स एसओ- बुराई को रोकना '

जवाबों:


17

उदाहरण:

सिद्ध करें कि मैं एक NUL बाइट भेज रहा हूं, उसके बाद एक नई पंक्ति:

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

अब मैं NUL बाइट को !विस्मयादिबोधक चिह्न में बदलता हूं :

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

इसलिए ट्रिक \x00NUL-बाइट के रूप में उपयोग कर रहा है ।


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 का इस्तेमाल किया। POSIX के अनुसार , यह \0शून्य बाइट द्वारा प्रतिस्थापित करता है। यह प्रतिस्थापन आवश्यक नहीं है ("समर्थित किया जाएगा"), और वास्तव में बैश सीधे इसका समर्थन नहीं करता है। इसके लिए, आपको उपयोग करने की आवश्यकता है echo -e। मैं अपने जवाब के echoसाथ प्रतिस्थापित करता printfहूं जो अधिक संगत लगता है ...
जोफेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.