ইউনিক্সে নাল অক্ষর সনাক্তকরণ এবং অপসারণ


99

আমার কাছে একটি পাঠ্য ফাইল রয়েছে যাতে অযাচিত নাল অক্ষর রয়েছে (ASCII NUL, \0)। আমি যখন এটিকে দেখার চেষ্টা করি তখন আমি সাধারণ পাঠ্যে আন্তঃলিপ্ত চিহ্নগুলি viদেখতে পাই ^@। কিভাবে আমি করতে পারি:

  1. ফাইলের কোন লাইনে নাল অক্ষর রয়েছে তা চিহ্নিত করুন? আমি গ্রিপিংয়ের চেষ্টা করেছি \0এবং \x0এটি কার্যকর হয়নি।

  2. নাল অক্ষর মুছবেন? stringsফাইলটি চালানো এটি পরিষ্কার করে দিয়েছে, তবে আমি কেবল ভাবছি যে এটি সবচেয়ে ভাল উপায়?


4
এই ধরণের প্রশ্ন সম্ভবত সুপার ইউজার ডটকমের সাথে রয়েছে
অলিভিয়ার লালনডে

4
বস্তুত, এই প্রশ্নের superuser.com হয়: superuser.com/questions/75130/how-to-remove-ths-symbol-with-vim
jrb

উত্তর:


132

আমি ব্যবহার করব tr:

tr < file-with-nulls -d '\000' > file-without-nulls

আপনি যদি ভাবছেন যে কমান্ড আর্গুমেন্টগুলির মাঝখানে ইনপুট পুনর্নির্দেশ কাজ করে, এটি করে। সর্বাধিক শাঁস চিনতে এবং আমি চুক্তি হবে ইনপুট / আউটপুট ফেরৎ ( <, >, ...) কমান্ড লাইন, আসলে যে কোন জায়গায়।


এবং একটি "নাল ব্যতীত নাল ফাইল-বিহীন ফাইল" আমাকে দেখায় যে কোন লাইনে নাল অক্ষর ছিল? এটি প্রত্যাশার চেয়ে অনেক বেশি ফিরিয়ে আনে।
ডগবনে

10
আসলে, আমি বিশ্বাস করি tr -d '\000' < file-with-nulls > file-without-nullsযেহেতু <এটি শেল পাইপ কার্যকারিতার অংশ এবং এটি হওয়া উচিত tr
মিকেল এস

9
বেশিরভাগ শেলগুলি আর্গুমেন্ট স্ট্রিংয়ের </>> যে কোনও জায়গায়, স্বীকৃত এবং লেনদেন করবে। আমাকেও অবাক করে দিয়েছিল।
Pra

4
পরিবর্তে ইনপুট পুনঃনির্দেশের ব্যবহারের জন্য +1 cat |। একটি সূক্ষ্ম, পরিষ্কার সমাধান এবং এটি আমার সমস্যার সমাধান করে।
ক্রিজিসটফ জাবোসস্কি

4
@ পয়েন্ট '\ 000' টিআর এর জন্য পসিক্স ওপেনগ্রুপ স্পেসিফিকেশনে '\ 0' এর পরিবর্তে ব্যবহৃত হয়। এটি পছন্দ করার পক্ষে এটি একটি ভাল কারণ
হ্যারল্ড ফিশার

68

একটি ফাইলের নাল অক্ষর মুছে ফেলার জন্য নিম্নলিখিত সিড কমান্ডটি ব্যবহার করুন।

sed -i 's/\x0//g' null.txt

এই সমাধানটি জায়গায় জায়গায় ফাইল সম্পাদনা করে, গুরুত্বপূর্ণ যদি ফাইলটি এখনও ব্যবহৃত হয়। পাসিং -i'ext '' এক্সটিক্স 'প্রত্যয় যুক্ত করে মূল ফাইলটির একটি ব্যাকআপ তৈরি করে।


6
দ্রষ্টব্য: ফ্রিবিএসডি-তে (এবং আমি বিশ্বাস করি ম্যাক ওএস এক্সও), পরবর্তী যুক্তিতে একটি এক্সটেনশন sed -i প্রয়োজন , তবে এটি খালি থাকতে পারে। ঐ সমস্ত সিস্টেমে, একটি যোগ '', হিসাবে: sed -i '' 's/\x0//g "$FILE"
টিম Čas

4
এটি trআমার চেয়ে দ্রুততর আকারের ক্রম
ডায়াডেলিক

আমার জন্য, উইন্ডোজ এবং জন্য Git ব্যবহার $ sed --version-> sed (GNU sed) 4.7, আমি নিম্নলিখিত আবাহন ব্যবহার করার জন্য একটি ব্যাকআপ নামক ফাইল পেতে ছিল example.csv.bak:sed -i.bak 's/\x0//g' example.csv
অ্যান্ড্রু Keeton

4
@ টিমাস আপনি এটি দুর্দান্ত করেছেন, কেবল একটি 'মিস করেছেন তাই এটি সিড-আই' হওয়া উচিত \ x0 // জি 'কিছু_ফিল.এক্সএমএল
ডার্কো

@ দারকো তাই করেছি। উফ!
টিম

22

প্রতিটি অপর বাইট বলে একে অপরকে অবাঞ্ছিত NUL টি অক্ষর বোঝায় যে ফাইলটি ইউটিএফ -16 এ এনকোড হয়েছে এবং আপনাকে iconvএটি ইউটিএফ -8 এ রূপান্তর করতে ব্যবহার করা উচিত ।


4
আমার অ্যাপ্লিকেশন লগইন করার সময় আমি ডিস্কের জায়গার বাইরে চলে এসেছি। এর ফলে এই চরিত্রগুলি দেখা দেয়।
ডগবনে

উদাহরণস্বরূপ, এটি এই কমান্ড ব্যবহার কাজ করে: iconv -f UTF-16 -t UTF-8 file
djule5

7

আমি নিম্নলিখিতটি আবিষ্কার করেছি, যা কোন রেখাটি মুদ্রণ করে, যদি কোনও হয় তবে নাল অক্ষর রয়েছে:

perl -ne '/\000/ and print;' file-with-nulls

এছাড়াও, একটি অষ্টাল ডাম্প আপনাকে বলতে পারে যদি সেখানে নাল থাকে:

od file-with-nulls | grep ' 000'

5

যদি ফাইলের রেখাগুলি \ r \ n \ 000 দিয়ে শেষ হয় তবে works n \ 000 মুছে ফেলতে কী কাজ করবে তারপরে replace r এর সাথে replace n প্রতিস্থাপন করুন।

tr -d '\n\000' <infile | tr '\r' '\n' >outfile

পুনশ্চ. আপনি যদি একটি উইন্ডোজ ডস শেলটিতে নিজেকে খুঁজে পান তবে আপনি সোর্সফোর্জ.নেট থেকে ইউনিক্স কমান্ডের GNU / win32 সংস্করণগুলি পেতে পারেন। আমি সব সময় তাদের ব্যবহার। কোনও ফাইলের কী আছে তা বিশ্লেষণের জন্য "অড"
অষ্টাল

2

এখানে ex(স্থানে) ব্যবহার করে কীভাবে নুল অক্ষরগুলি সরানো যায় তার উদাহরণ এখানে দেওয়া হয়েছে :

ex -s +"%s/\%x00//g" -cwq nulls.txt

এবং একাধিক ফাইলের জন্য:

ex -s +'bufdo!%s/\%x00//g' -cxa *.txt

পুনরাবৃত্তির জন্য, আপনি গ্লোব্বিং বিকল্প ব্যবহার করতে পারেন **/*.txt(যদি এটি আপনার শেল দ্বারা সমর্থিত হয়)।

স্ক্রিপ্টিংয়ের জন্য কার্যকর sed এবং এর -iপ্যারামিটারটি একটি মানহীন BSD এক্সটেনশন।

আরও দেখুন: ফাইলটি বাইনারি ফাইল কিনা তা যাচাই করে কীভাবে ফাইলগুলি পড়তে হয় না?


1

আমি ব্যবহার করতাম:

recode UTF-16..UTF-8 <filename>

ফাইল থেকে শূন্য থেকে মুক্তি পেতে।


0

আমি একই ত্রুটির সাথে सामना করেছি:

import codecs as cd
f=cd.open(filePath,'r','ISO-8859-1')

আমি এনকোডিংটি এ পরিবর্তন করে সমস্যার সমাধান করেছি utf-16

f=cd.open(filePath,'r','utf-16')
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.