লিনাক্সের দুটি ফাইলের মধ্যে সাদা জায়গার পার্থক্য


15

আমার দুটি ফাইল রয়েছে যা আমি যখন ভিন্নতার সাথে তুলনা করি তখন দেখায় যে প্রতিটি লাইন পরিবর্তিত হয়েছে। আমি যখন তাদের সাথে তুলনা করি diff -w(হোয়াইটস্পেস উপেক্ষা করে) এটি আমার প্রত্যাশিত কয়েকটি ন্যূনতম পরিবর্তনগুলি দেখায়।

স্পষ্টতই প্রতিটি ফাইলে সাদা স্থানের মধ্যে কিছু পার্থক্য রয়েছে তবে সেগুলি কী কী তা বা কীভাবে তা সন্ধান করব তা আমি জানি না। হোয়াইটস্পেসটি আসলে স্পেস ক্যারেক্টার (ট্যাবগুলির বিপরীতে) রয়েছে তা নিশ্চিত করার জন্য আমি ফাইলগুলি সম্পাদনা করার চেষ্টা করেছি তবে অন্যটি কী করবে তা নিয়ে আমি নিশ্চিত নই।

:set list onলাইনের শেষে কোনও পিছনে স্থান নেই তা নিশ্চিত করার জন্য আমি ভিম ব্যবহার করেছি ।

আমি আরও বিশ্বাস করি যে প্রতিটি ফাইলে লিনাক্সের লাইন টার্মিনেটর রয়েছে যেমন ভিএম ^Mলাইনের শেষে প্রদর্শন করে না ।


1
আপনি কি হোয়াইটস্পেস (একটি লাইনের শেষে) অনুসরণ করার জন্য পরীক্ষা করেছেন? এই জাতীয় স্থান সনাক্ত করা হবে diffতবে অনেক সম্পাদক, ডিফল্টভাবে যাইহোক, এই স্থানটিকে দৃশ্যমান করে না।
1024

ভাল পরামর্শ। আমি ":" এর সাথে উইমটি ব্যবহার করে লাইনের শেষে "$" দেখিয়েছি এবং সেখানে কোনও পিছনের স্থান নেই। আমি আমার প্রশ্নটি আপডেট করব
রোমস্কি

আপনি যদি একজন vimব্যবহারকারী হন, তবে আপনি vimdiff file1 file2কী পার্থক্যগুলি তা দেখার চেষ্টা করেছেন ?
1024

@ জন 1024 আমি ভিমডিফ সম্পর্কে অবহিত ছিলাম না তবে এটি আশাব্যঞ্জক বলে মনে হচ্ছে। এটি উত্তর হিসাবে যুক্ত করুন এবং আমি গ্রহণ করব
রোমস্কি

1
ভিম কেবল তখনই এমএম দেখায় যখন এটি কোনও ইউনিক্স লাইন সমাপ্তি ভুল করে কিন্তু ফাইলটিতে ডস লাইন শেষ হয়। সাধারণত আপনি যদি কোনও একক ফাইলের সাথে মিশ্রিত লাইনটি পেয়ে থাকেন তবে উদাহরণস্বরূপ, আসল ফাইলের চেয়ে আলাদা লাইন দিয়ে প্যাচ প্রয়োগ করা। যখন ভিম ডস লাইনটি সঠিকভাবে শেষ হয়ে যায় তা সনাক্ত করে, এটি এম shown এম প্রদর্শন করবে না।
মিথ্যা রায়ান

উত্তর:


7

জন্য vimব্যবহারকারী, সেখানে ফাইল মধ্যে সঠিক পার্থক্য দেখানোর জন্য একটি সুবিধাজনক ইউটিলিটি:

vimdiff file1 file2

এটি প্রতিটি ফাইল উইন্ডোতে পাশাপাশি রাখবে এবং রঙের সাথে হাইলাইট করা পার্থক্যগুলি রাখবে।

কিছু দরকারী কমান্ড আছে যখন vimdiff

থাকাকালীন vimdiff, কিছু দরকারী কমান্ডগুলি হ'ল:

  • ]c: পরবর্তী পরিবর্তনের দিকে ঝাঁপ দাও

  • [c: পূর্ববর্তী পরিবর্তনে ঝাঁপ দাও

  • ctrl-W ctrl-W: অন্যান্য উইন্ডোতে স্যুইচ করুন

  • zo: খোলা ভাঁজ

  • zc: ভাঁজ বন্ধ

উদাহরণ

এখানে একটি উদাহরণ vimdiffএকটি ইন xtermএকটি এর তুলনা দুটি সংস্করণ cupsকনফিগারেশন ফাইল:

এখানে চিত্র বর্ণনা লিখুন

আপনি দেখতে পাচ্ছেন যে অভিন্ন লাইনের দীর্ঘ অংশগুলি ধসে গেছে। এগুলি দিয়ে আবার খোলা যেতে পারে zo

রঙ বিকল্পটি আপনার বিকল্প সেটিংসের উপর নির্ভর করে পরিবর্তিত হবে। উপরের উদাহরণে, যখন কোনও ফাইলে একটি লাইন প্রদর্শিত হয় তবে অন্যটি নয়, সেই লাইনটি একটি গা blue় নীল পটভূমি দেওয়া হয়। অন্য ফাইলটিতে, অনুপস্থিত রেখাগুলি ড্যাশযুক্ত লাইন দ্বারা নির্দেশিত। যখন উভয় ফাইলে একটি লাইন উপস্থিত হয় তবে কিছু পার্থক্য থাকে, রেখাগুলির অপরিবর্তিত অংশগুলির গোলাপী ব্যাকগ্রাউন্ড থাকে এবং পরিবর্তিত অংশগুলির একটি লাল ব্যাকগ্রাউন্ড থাকে।


14

ফ্রিবিএসডি বা বেশিরভাগ লিনাক্স সিস্টেমে আপনি cat -v -e -tসাদা স্থানের পার্থক্য দেখানোর জন্য ডিফের আউটপুটটি পাইপ করতে পারেন ।

diff file1 file2 | cat -vet

ট্যাবগুলি প্রতিটি লাইনের শেষে ^Iএকটি হিসাবে প্রদর্শিত $হবে যাতে আপনি পিছনের সাদা অংশটি দেখতে পান এবং অ-মুদ্রণযোগ্য অক্ষরগুলি ^Xবা হিসাবে প্রদর্শিত হবে M-X

আপনার যদি জিএনইউ কোরিউটিলস রয়েছে (বেশিরভাগ নন-ব্যস্তবক্সবক্স লিনাক্স বিতরণে উপলভ্য) তবে এটিকে সরলীকৃত করা যেতে পারে

diff file1 file2 | cat -A

ব্যস্তবক্স সিস্টেমে, ব্যবহার করুন catv -vet


2

উইন্ডোজ মেশিনে ফাইলগুলির মধ্যে একটি সম্পাদনা করা হয়েছিল?

উইন্ডোজে স্ট্যান্ডার্ড লাইন সমাপ্তি হ'ল সিআরএলএফ, যেখানে লিনাক্সে এটি কেবল এলএফ (এবং ম্যাক্সে এটি সিআর হিসাবে ব্যবহৃত হত, তবে আমি সন্দেহ করি যে এটি ওএস এক্সের পরে পরিবর্তিত হয়েছে)।

wc -lফাইলগুলি চেষ্টা করে দেখুন এবং কতগুলি লাইন রয়েছে তা দেখুন, আকারের পার্থক্যটি লাইন সংখ্যার সমান কিনা (শেষ পংক্তিটি একটি ফাইলে শেষ করা যাবে না) see


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

3
লিম টার্মিনেশনটি স্বয়ংক্রিয়ভাবে সনাক্ত করার জন্য ভিআইএম আসলেই যথেষ্ট স্মার্ট, বিশদ জন্য স্ট্যাকওভারফ্লো . com/ প্রশ্নগুলি / ৩৮৮৮৮৮৮৮ দেখুন।
fencepost

আমি সেটা সম্পর্কে সচেতন ছিলাম না! আমি পুনরায় চেক করব
রোমস্কি

2

odসাহায্য করতে পারে. অক্টাল ডাম্প কমান্ড হেক্সাডেসিমালে লিখিত সামগ্রী প্রদর্শন করতে পারে। নাল বাইট বা অপ্রত্যাশিত শ্বেত স্পেস সহ একটি বাইট কী রয়েছে তা দেখতে এটি আপনাকে সহায়তা করতে পারে। সম্ভাব্য সাধারণ কারণগুলি হ'ল এলএফ বনাম সিআরএলএফ, ট্যাব বনাম স্পেস, বা এএসসিআইআই বনাম ইউনিকোড (যা প্রায়শই প্রতিটি দৃশ্যমান বাইটের আগে নাল বাইট থাকতে পারে)। od -x filenameএই নিদর্শনগুলির কোনও প্রকাশ করা উচিত। আপনি যদি ফাইলটি দেখার আরও বিস্তৃত উপায় চান তবে যে কোনও "হেক্স সম্পাদক" খুব সুন্দরভাবে করতে পারেন। সুন্দর জিনিসটি odহ'ল cutকমান্ডের মতো এটিও অনেকগুলি ইউনিক্স সিস্টেমে অন্তর্নির্মিত। সুতরাং, প্রায়শই, কোনও পৃথক ইনস্টলেশন প্রয়োজন হয় না।

আপনার যদি আরও অনুরূপ ফাইলগুলির প্রয়োজন হয় তবে trকিছু পরিবর্তন sedকরতে পারেন এবং আরও কিছু করতে পারেন। আমি সম্ভবত ls -lকোন ফাইলটি আরও বড় তা দেখতে শুরু করব , তারপরে কী পরিবর্তন করতে হবে তা দেখার জন্য বাইটগুলি দেখুন এবং তারপরে ফাইলগুলির মধ্যে একটি পরিবর্তন করুন যাতে সেগুলি আরও সাদৃশ্য বলে মনে হয়।


1

প্রকৃত শ্বেতস্থান এবং ট্যাবগুলি কোথায় তা সন্ধান করার জন্য আপনি এগুলি ব্যবহার করে প্রতিস্থাপন করতে পারেন sed:

$ cat file
  line 1
  line 2
    line 6
        line 7
$ sed 's/ /-/g; s/\t/<tab>/g' file
--line-1
--line-2
<tab>line-6
<tab><tab>line-7

এবং এখন দুটি ফাইলের তুলনা করুন।


আরও ভাল, আপনি ডিফল্ট আউটপুট এ ফিল্টার চালাতে পারে। অথবা আপনি cat
তৈরির

0

উপরের "প্রশ্ন" বিভাগ থেকে নীচের বিষয়বস্তু এখানে অনুলিপি করা হয়েছিল, যা রমস্কি লিখেছিলেন।

উভয় vimdiffএবং diff file1 file2 | cat -Aএকটি সরঞ্জাম দৃষ্টিকোণ থেকে খুব দরকারী ছিল।

শেষ অবধি, আমি আরও একটি সমস্যা পেয়েছি। আমার কিছু ফাইল ইউটিএফ -8 বিওএম দিয়ে এনকোড করা হয়েছিল। এটি ব্যবহার করে হাইলাইট করা হয়েছিল diff file1 file2 | cat -A। এটি M-oM-;M-?প্রভাবিত ফাইলের শুরুতে নিজেকে প্রকাশ করেছিল :

$ diff file1 file2 | cat -A
< package com.mycompany;$
---$
> M-oM-;M-?package com.mycompany;$

যদিও বেশ কয়েকটি সমস্যা ছিল, আমি তাদের ফাইলগুলি পরিষ্কার করার জন্য নীচে কয়েকটি কমান্ড তালিকাভুক্ত করেছি:

# recursively remove UTF8 BOM
find . -type f -exec sed -i -e '1s/^\xEF\xBB\xBF//' {} \;

# recursively replace CRLF with LF
find . -type f -print0 | xargs -0 dos2unix
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.