এই চিহ্নটি কীভাবে "^ @" সরিয়ে ফেলবেন?


59

আমার কাছে কিছু ফাইল রয়েছে যা এই চিহ্নের সাথে দূষিত:

^ @

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

এখানে একটি ফাইলের উদাহরণ লাইন দেওয়া হল:

^@F^@i^@l^@e^@n^@a^@m^@e^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@:^@ ^@^M^@

উত্তর:


51

আপনি চেষ্টা করতে পারেন:

  • %s/<CTRL-2>//g (নিয়মিত পিসিতে)

  • %s/<CTRL-SHIFT-2>//g (ম্যাক পিসিতে)

যেখানে <CTRL-2>নিচে প্রথম প্রেস মানে CTRLনিয়মিত পিসি, যেমন চেপে চেপে এটা রেখে আঘাত 2, রিলিজ CTRL

এবং এর <CTRL-SHIFT-2>অর্থ প্রথমে controlম্যাক পিসিগুলিতে চাপুন shift, এটিকে টিপে রাখা হিসাবে রাখুন, ম্যাক পিসিগুলিতে চাপুন , এটিকে চেপে ধরে রেখে, হিট করুন 2, ছেড়ে দিন controlএবং shift

অবশেষে, দুটি কমান্ডের উভয়ই %s/^@//gস্ক্রিনে ফলাফল হওয়া উচিত । ^@এর অর্থ একটি একক অক্ষর (একটি ন্যুয়াল বাইট, যা অন্যথায় প্রদর্শিত হতে পারে না), তার ^পরে অনুসরণ করা হয় না @, সুতরাং আপনি কেবল উপরের কমান্ডটিতে টাইপ করতে ^এবং @এক সারিতে পারেন না ।

এই কমান্ডটি সমস্ত মুছে ফেলে ^@


4
সম্পর্কিত লিঙ্কের মাধ্যমে এই প্রশ্ন / উত্তরকে কেবল হোঁচট খেয়েছে: এটি আসলে একটি খারাপ পরামর্শ এবং খুব কম ক্ষেত্রে কেবল সঠিকভাবে কাজ করবে। নাল বাইট বাদ দেওয়ার পরিবর্তে প্রকৃতপক্ষে এনকোডিংটি পরিবর্তন করা ভাল। যদি আপনি নাল বাইটগুলি সরিয়ে ফেলেন তবে আপনার কাছে এখনও অন্যান্য মাল্টিবাইট অক্ষর থাকতে পারে যা আবর্জনা হিসাবে দেখায়।
মারিও

@ মারিও আপনি কি আমাদের এনকোডিং পরিবর্তন সম্পর্কে আরও বলতে পারেন? এটি নীচে jrb এর উত্তর সম্পর্কিত কিছু?
জর্জ

আরপিএইজের উত্তর নীচে আরও দেখুন। যথাযথ এনকোডিং ব্যবহার করে ফাইলটি লোড করার পাশাপাশি এটি অন্যর সাথে সংরক্ষণ করে দেখায় (যদিও উত্তরটির আরও কিছু ব্যাখ্যা দরকার হতে পারে)। আপনি যদি কেবল এটি পড়তে চান তবে Jrb এর শেষ নোটটি যথেষ্ট, তবে আপনি যদি অন্য কোনও এনকোডিং ব্যবহার করে নাল বাইট না করে এটি সংরক্ষণ করতে চান তবে তা নয়।
মারিও

50

আমি মনে করি না যে আপনার ফাইলগুলি কলুষিত হয়েছে। আপনার উদাহরণের লাইনে দেখে মনে হচ্ছে এতে প্রতিটি অক্ষরের মধ্যে নাল বাইট সহ নিয়মিত পাঠ থাকে। এটি প্রস্তাব দেয় এটি একটি পাঠ্য ফাইল যা ইউটিএফ -16 এ এনকোড করা হয়েছে তবে বাইট-অর্ডার চিহ্নটি ফাইলটির শুরু থেকেই অনুপস্থিত। Http://en.wikedia.org/wiki/Byte-order_mark দেখুন

ধরুন আমি নোটপ্যাড খুলি, 'ফাইলের নাম' শব্দটি টাইপ করুন এবং ইউনিকোড বিগ-এন্ডিয়ান হিসাবে সংরক্ষণ করুন। এই ফাইলটির একটি হেক্সাস ডাম্প এর মতো দেখাচ্ছে:

fe ff 00 66 00 69 00 6c 00 65 00 6e 00 61 00 6d 00 65

আমি যদি এই ফাইলটি ভিমে খুলি তবে এটি দেখতে দুর্দান্ত দেখাচ্ছে - 'ফে এফএফ' বাইটগুলি কীভাবে ফাইলটিকে এনকোড করা হয়েছে তা ভিমকে বলে। এখন ধরা যাক, আমি একটি ফাইল তৈরি করেছি যা বাইটের ঠিক একই সিকোয়েন্স যুক্ত রয়েছে, তবে শীর্ষস্থানীয় 'ফে এফএফ' ছাড়াই। নাল বাইটের জায়গায় ভিম সন্নিবেশ ^ @ (বা <00>, আপনার কনফিগারেশনের উপর নির্ভর করে); নোটপ্যাড স্পেস সন্নিবেশ করায়।

সুতরাং নালগুলি অপসারণ করার পরিবর্তে আপনার সত্যিকার অর্থে ভিম ফাইলটি সঠিকভাবে ব্যাখ্যা করার জন্য সন্ধান করা উচিত। আপনি কমান্ডটি দিয়ে সঠিক এনকোডিং সহ ফাইলটি পুনরায় লোড করতে ভিমকে পেতে পারেন:

:e ++enc=utf16


হ্যাঁ, শেষ কমান্ডটি vim ফাইলটিকে সঠিকভাবে ব্যাখ্যা করেছে তবে নালবাইটগুলি সরিয়ে দেয় না।
মিঃ 181

6
এগুলি সরাতে, অন্য একটি এনকোডিং চয়ন করুন এবং ফাইলটি আবার সংরক্ষণ করুন: সেট fenc = utf-8
scy

35

এটি আসলে আমার জন্য ভিমের মধ্যে কাজ করেছিল:

:%s/\%x00//g

5
এটি বিকল্প () এর সাথে কাজ করে, তবে Ctl-VCtl-Shift-2 এটি করে না।
dsummersl

আমার জন্য একই সমস্যা, আমি <Ctrl-V><Ctrl-2>(পাশাপাশি যার সাথে <Ctrl-Shift-2>) হয় সেভাবে কাজ করতে পারি না, তবে এটি কাজ করে।
জেফ ব্রিজম্যান

5
এটি আমার জন্য লিনাক্স কাজ করে। '00' হ'ল এএসসিআইআই হেক্স মান, এটির উপর কার্সার রেখে এবং কম্যান্ড মোডে 'ga' ("ascii পান") টাইপ করে বা কমান্ড লাইনে as /: ascii টাইপ করে আপনি যে কোনও অক্ষরের সন্ধান করতে পারেন v .wikia.com / wiki /…
কেসী জোনস

^ Vx00 এছাড়াও কাজ করে। আপনি ^ ভুএক্সএক্সএক্সএক্সএক্স দিয়ে 16-বিট ইউনিকোডও প্রবেশ করতে পারেন। আমি একটি অনুসন্ধানে \% ইউএক্সএক্সএক্সএক্সএক্স চেষ্টা করেছি এবং এটিও কাজ করেছিল।
এডওয়ার্ড ফাল্ক

আপনি শেষ অবধি আমার প্রিয় মানুষ হবেন। আমার হৃদয়ের গভীর থেকে ... ধন্যবাদ!
গনজালো কাও

12

যে 'প্রতীক' ASCII মান সহ 000, একটি NULL অক্ষর উপস্থাপন করে।

এটি ভিএম দিয়ে মুছে ফেলা কঠিন, চেষ্টা করুন

tr -d '\000' < file1 > file2

7

অন্যরা যেমন উল্লেখ করেছে, সেগুলি নাল বাইট (ASCII 00)। লিনাক্স-এ, ASCII মানগুলিকে ভিমে প্রবেশ করার উপায়টি হল Ctrl-V টিপুন এবং তারপরে যে কোনও অক্ষরের 3-অঙ্কের অক্টাল মান থাকে। সমস্ত নাল বাইটগুলি প্রতিস্থাপন করতে, ব্যবহার করুন:

    :%s/Ctrl-V000//g

(কোনও স্থান ছাড়াই)।

তেমনি, আপনি নালগুলির সাথে অনুসন্ধান করতে পারেন:

    /Ctrl-V000

উভয় ক্ষেত্রেই, শিরোনামগুলি টাইপ করার সময় এটি প্রদর্শন করবে না, তবে তিনটি প্রবেশ করার পরে এটি প্রদর্শিত হবে ^@। রঙিন টার্মিনালগুলিতে এটি নীল রঙে এটি নিয়ন্ত্রণ চরিত্রের নির্দেশ করে।


6

এফডাব্লুআইডাব্লু, আমার ক্ষেত্রে ম্যাকের উপরে নির্মিত একটি টেক্সট ফাইল সম্পাদনা করতে আমাকে সাইগউইনের উপর ভিএম ব্যবহার করতে হয়েছিল। গৃহীত সমাধানটি আমার পক্ষে কাজ করে না, তবে কাছে ছিল। ইউনিকোডের সাথে কাজ করার বিষয়ে ভিম উইকির পৃষ্ঠা অনুসারে , বিওএম বাইটের বিগ এন্ডিয়ান এবং লিটল এন্ডিয়ান সংস্করণের মধ্যে পার্থক্য রয়েছে। সুতরাং, আমাকে vimবিওএম এনকোডিংয়ের একটি ছোট্ট এন্ডিয়ান সংস্করণ ব্যবহার করার জন্য স্পষ্টভাবে বলতে হয়েছিল।

ডান এনকোডিংটি বাছাই করার পরেই আমি ফাইল ফর্ম্যাটটিকে (লাইন এন্ডিংস) রূপান্তর dosকরেছি যাতে আমি উইন্ডোজ সম্পাদকটিতে ফাইলটি সম্পাদনা করতে পারি। এনকোডিংটি নির্দিষ্ট করে দেওয়ার আগে ফাইল ফর্ম্যাটটি পুনরায় সেট করার চেষ্টা করা আমাকে দুঃখ দিয়েছে। আমি ব্যবহৃত কমান্ডগুলির সম্পূর্ণ তালিকা এখানে:

:e ++enc=utf16le
:w!
:e ++ff=mac
:setlocal ff=dos
:wq

মূল্যবান তথ্য। আমার ক্ষেত্রে এটি ছিল বিওএম বাইটের সমাপ্তি।
আন্দ্রে আলবুকার্ক

3

গৃহীত সমাধানটি আমার পক্ষে কার্যকর হয়নি। আমি এর trপরিবর্তে ভিম পাইপ ফাইলটি তৈরি করেছি:

:%!tr -d '\000'

এটি ভিজ্যুয়াল মোডের সাথে (কেবল টাইপ করুন :!tr -d '\000') বা বিভিন্ন রেখায় ভাল কাজ করবে:

# Remove nulls from current line:
:.!tr -d '\000'

# Remove nulls from lines 3-5:
:3,5!tr -d '\000'

2

^@ আপনি যদি সঠিক এনকোডিং ব্যবহার করেন তবে খারাপ চরিত্র নয়, তবে আপনি যদি মুছে ফেলতে চান তবে চেষ্টা করুন:

  • tr -d '\000'
  • sed 's/\000//g'

আপনার উদাহরণের ডেটাতে এম অক্ষর রয়েছে

কোনও প্রক্রিয়াকরণের আগে আপনার ফাইলটিকে ইউনিক্স / লিনাক্স ফর্ম্যাটে রূপান্তর করতে, চেষ্টা করুন:

dos2unix filename - রেল এবং অন্যান্য

dos2ux filename [newfilename] - এইচপি-ইউএক্স


1

@ Jrb এর উত্তর ছাড়াও, ভিমে ফাইলের কোডিং বিকল্পের উপর ভিত্তি করে ফাইলের অক্ষর এনকোডিং সনাক্ত করা হয়। (ফাইলেনকোডিংয়ের শেষে 'গুলি' নোট করুন)

উইন্ডোজ অন, fileencodingsবিকল্পটির জন্য ডিফল্ট মান ucs-bom, যার অর্থ:

ফাইলের শুরুতে বিওএম উপস্থিত রয়েছে কিনা তা পরীক্ষা করে দেখুন।

যদি বিওএম বিদ্যমান থাকে, তবে 'বিএম এর বাইরে ফাইলের অক্ষর এনকোডিংটি পড়ুন'।

যদি বিওএম বিদ্যমান না থাকে (এবং এই ক্ষেত্রে এর অর্থ এইও হবে যে fileencodingsবিকল্পে বর্ণিত সমস্ত অক্ষর এনকোডিংগুলি মিলতে ব্যর্থ হয়েছে), তবে encodingবিকল্পটিতে বর্ণিত অক্ষর এনকোডিং সহ ফাইলটি পড়ুন । ডিফল্ট অক্ষর এনকোডিং encodingবিকল্প হল: latin1। এখন, কারণ latin1হয় এক বাইট দৈর্ঘ্য অক্ষর এনকোডিং, সব ফাইলে বাইট বৈধ latin1অক্ষর (এমনকি Nulচরিত্র ^@যে আপনি * দেখছি)।

* - প্রকৃতপক্ষে, ^@ভিমের বাফার পাঠ্যে নতুন লাইনের চরিত্র, নুল চরিত্রটি নয়।

ফাইলটি পড়ার যথাযথ উপায় হ'ল ইউটিএফ -16 হিসাবে অক্ষর এনকোডিংটি ম্যানুয়ালি নির্দিষ্ট করা (যেমনটি ইউটিএফ -16 দেখতে এই ক্ষেত্রে উপযুক্ত চর এনকোডিং)।

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