আমি কীভাবে কম রঙিন রঙিন পৃথক আউটপুট পাইপ করব?


37

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

উত্তর:


32

diffআউটপুট রং করতে পারেন না, আপনি অন্য প্রোগ্রাম, যেমন প্রয়োজন colordiffযে জন্য। টার্মিনালের রঙগুলি এএনএসআই এস্কেপ কোডগুলির মাধ্যমে মুদ্রিত হয় যা কম ডিফল্টরূপে ব্যাখ্যা করে না। পেতে lessসঠিকভাবে রং দেখানোর জন্য, আপনি প্রয়োজন -rবা, এমনকি ভাল, -Rসুইচ:

colordiff -- "$file1" "$file2" | less -R

থেকে man less:

   -R or --RAW-CONTROL-CHARS
          Like -r, but only ANSI  "color"  escape  sequences  are
          output in "raw" form.  Unlike -r, the screen appearance
          is maintained correctly in most  cases.   ANSI  "color"
          escape sequences are sequences of the form:

               ESC [ ... m

          where  the  "..."  is  zero or more color specification
          characters For the purpose of keeping track  of  screen
          appearance,  ANSI color escape sequences are assumed to
          not move the cursor.  You  can  make  less  think  that
          characters  other  than  "m"  can end ANSI color escape
          sequences by setting the environment  variable  LESSAN‐
          SIENDCHARS  to  the  list of characters which can end a
          color escape sequence.  And you  can  make  less  think
          that characters other than the standard ones may appear
          between the ESC and the m by  setting  the  environment
          variable  LESSANSIMIDCHARS  to  the  list of characters
          which can appear.

বিকল্পভাবে, আপনি ব্যবহার করতে পারেন moreযা ডিফল্টরূপে রঙগুলি সঠিকভাবে প্রদর্শন করবে।


আপনি যদি বাহ্যিক প্রোগ্রামগুলি ইনস্টল করতে না পারেন তবে আরও ম্যানুয়াল পদ্ধতির সাহায্যে আপনার একই আউটপুট পেতে সক্ষম হওয়া উচিত:

diff a b | 
   perl -lpe 'if(/^</){$_ = "\e[1;31m$_\e[0m"} 
              elsif(/^>/){$_ = "\e[1;34m$_\e[0m"}'

1
যদি কেউ তথ্য শতাংশ প্রদর্শিত দেখতে চায়, তারা ব্যবহার করতে হবে less -RM +Gg: superuser.com/questions/64972/...
baptx

13

এখানে অন্যান্য উত্তরগুলি পুরানো হতে পারে। কোর্টিলস হিসাবে 3.5 diffপ্রকৃতপক্ষে রঙিন আউটপুট উত্পাদন করতে পারে যা স্টাডআউট যখন কনসোল না থাকে তখন ডিফল্ট হিসাবে বন্ধ হয়ে যায়।

ম্যান পৃষ্ঠা থেকে:

--color[=WHEN]
আউটপুট colorize; WHENহতে পারে never, alwaysবা auto(ডিফল্ট)

স্টাডআউট যখন রঙ আউটপুট জোর করার জন্য একটি পাইপ diff --color=always -- "$file1" "$file2" | less -Rকাজ করা উচিত।


আপনি alias diff='diff --color=always'একটি .bashrcবা .zshrcফাইলের মধ্যে অন্তর্ভুক্ত করতে পারেন ।
জাফতুগা

1
হ্যাঁ। আমি ব্যবহার করছিalias diff='diff --side-by-side --left-column --color=always'
ক্ষিতাইজ শর্মা

আমি ব্যবহার করি alias diff='/usr/bin/diff --color=always 'এবং alias less='/usr/bin/less -r 'তবে যদিও প্রথমদিকে কম কিছু প্রথম পৃষ্ঠায় ভিন্নতা বর্ণিত হয় তবে দীর্ঘ সময় ধরে এটি মনোতে ফিরে যায়। এটি সম্ভবত এমন জাম্পগুলিতে থাকতে পারে যা স্পষ্টভাবে পৃথককে প্রভাবিত করবে না, কারণ এটির আউটপুট কেবল একবার উত্পন্ন হয় এবং লাফাতে হয় না, তবে কোনওভাবে রঙগুলির ট্র্যাক হারিয়ে ফেলে।
নিলজি

8

কম রঙিন পৃথক পাইপ করতে:

diff $file1 $file2 | colordiff | less -r

এটি একটি পর্দার মধ্যে সীমাবদ্ধ রেখে আরও পঠনযোগ্য:

diff -uw $file1 $file2 | colordiff | less -r

এবং, যদি কেবলমাত্র একটি পর্দার মূল্যবান সামগ্রী থাকে তবে প্রদর্শন না করার কারণ কম:

diff -uw $file1 $file2 | tee /dev/stderr | colordiff | less -r -F

-এফের সাথে সাথে কন্টেন্টের কম স্ক্রিন কম থাকলে তাৎক্ষণিকভাবে বন্ধ হয়ে যায়, স্টার্ডারের পাইপ হ'ল কম যখন আপনি আউটপুট হারাবেন - স্টার্ডারের কাছে পাইপ দিয়ে, এটি কম প্রদর্শিত না হলেও আউটপুট পায়।

একটি বিকল্প (এবং, আমি মনে করি, আরও ভাল) উপায় হ'ল স্ক্রিনটি কম সাফ করা রোধ করতে কেবল এক্স ব্যবহার করা:

diff -uw $file1 $file2 | colordiff | less -r -X -F

এটি আমার পক্ষে ভাল কাজ করে তবে এটি ব্যাশের জন্য নির্দিষ্ট হতে পারে। কলর্ডিফ কোনও অন্তর্নির্মিত নয়, তবে সহজেই ইনস্টল করা হয়।


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