এলএস এর আউটপুট কলামগুলি কীভাবে রঙ করবেন?


8

শিরোনাম ধরনের এটি সব বলছে: আমি ভালো কিছু আউটপুট যারা ঝরঝরে রঙ্গিন কলাম পেতে চাই ls -alহিসাবে, বলো 10basetom এর উত্তর থেকে এই প্রশ্নের

সংযুক্ত উত্তর থেকে সিনট্যাক্স-হাইলাইট কোড স্নিপেটের স্ক্রিনশট


ভাল, এটি একটি ঝরঝরে ধারণা! তবে আপনি কী ওএস চালু করছেন?
জ্যাকগল্ড

2
এটি এসই সফ্টওয়্যার দ্বারা বাশ সিনট্যাক্স-হাইলাইট (ভুলভাবে) বলে মনে হচ্ছে। দেখে মনে হচ্ছে এটি কলাম অনুসারে রঙিন নয় বরং অঙ্কগুলি (সংখ্যা) একটি রঙ পায় এবং বড় হাতের সাথে শুরু হওয়া যে কোনও কিছুই অন্য পায়। প্রতি কলামে রঙ করা করণীয় তবে ভিন্ন।
বব

3
সাধারণ অর্থে, আপনার সাথে কলাম বিভাজক উপর আউটপুট বিভক্ত করতে পারেন sedবা awkএকটি সন্নিবেশ ANSI পালাবার ক্রম
বব

সম্পর্কিত: superuser.com/q/665274
টাইসন

আমি উইন্ডোজ 10 উবুন্টু সাবসিস্টেমটিতে আছি, তবে ম্যাকোস-এ স্থানান্তরিত করছি (উইনএক্স পরিণত হয়েছে এমন পুরো বিপর্যয়ের পরে ...)
পিরেক্স

উত্তর:


8

এটি সঙ্গে doable awk। দুর্ভাগ্যক্রমে, যেহেতু ফর্ম্যাটটি ls -lঅনির্ধারিত, তাই এমন কোনও সমাধান নিয়ে আসা সম্ভব নয় যা প্রতিটি সিস্টেমে কাজ করবে তাই কোন সিস্টেমে কোন কলামের জন্য কোন রঙটি ব্যবহার করতে হবে তার কিছু সমন্বয় করতে হবে।


প্রথমে, আমরা ব্যবহৃত মূল স্থানগুলি সংরক্ষণ করতে চাই ls -l। অন্যথায়, কলাম সারিবদ্ধটি ভুল হবে। আমরা এই FPATবিকল্পটি দিয়ে এটি করতে পারি, এই এই উত্তরের জন্য ধন্যবাদ :

ls -la | awk '
    BEGIN {
        FPAT = "([[:space:]]*[^[:space:]]+)";
        OFS = "";
    }

ইন awk, প্রতিটি অবস্থানিক পরম ( $1, $2ইত্যাদি) বর্তমান ক্ষেত্রের একটি ক্ষেত্র, অর্থাৎ একটি কলামকে বোঝায়। FPATউপরের বিকল্পটি যা করেছে তা হ'ল প্রতিটি ক্ষেত্রকে পূর্ববর্তী সমস্ত জায়গাগুলি অন্তর্ভুক্ত করার জন্য পুনরায় সংজ্ঞায়িত করা হয়, সুতরাং আপনি যখন printপিছনে ফিরে আসেন তখন এটি ফাঁকা রাখে যাতে কলামগুলি একই অবস্থানে থাকে।

এখন আমরা রঙের কোডটি সন্নিবেশ করানোর জন্য প্রতিটি ক্ষেত্রটি সম্পাদনা করতে পারি , এবং তারপরে সম্পাদিত আউটপুট প্রিন্ট করতে পারি:

    {
        $2 = "\033[31m" $2 "\033[0m";
        $3 = "\033[36m" $3 "\033[0m";
        $4 = "\033[36m" $4 "\033[0m";
        $5 = "\033[31m" $5 "\033[0m";
        $6 = "\033[36m" $6 "\033[0m";
        $7 = "\033[36m" $7 "\033[0m";
        $8 = "\033[31m" $8 "\033[0m";
        print
    }
'

লক্ষ করুন যে, প্রতিটি কলামের ডিফল্টে রিসেট ফিরে (হয় 0মধ্যে [এবং m) পরে। আপনি যদি রঙটি একাধিক কলামে চালিত করতে চান তবে আপনি এই কোডটি বাদ দিতে পারেন। ব্যক্তিগতভাবে, আমি প্রতিটি কলাম স্বাধীনভাবে নির্দিষ্ট করতে পছন্দ করি।


আপনি নিজের মধ্যে পুনরায় ব্যবহারযোগ্য কমান্ডটি সংজ্ঞায়িত করতে পারেন .bashrc। উদাহরণ স্বরূপ:

lsc() {
    ls -la | awk '
        BEGIN {
            FPAT = "([[:space:]]*[^[:space:]]+)";
            OFS = "";
        }
        {
            $2 = "\033[31m" $2 "\033[0m";
            $3 = "\033[36m" $3 "\033[0m";
            $4 = "\033[36m" $4 "\033[0m";
            $5 = "\033[31m" $5 "\033[0m";
            $6 = "\033[36m" $6 "\033[0m";
            $7 = "\033[36m" $7 "\033[0m";
            $8 = "\033[31m" $8 "\033[0m";
            print
        }
    '
}

এই ফাংশন সংজ্ঞাটি চালানোর জন্য আপনাকে আপনার bashসেশনটি পুনরায় চালু করতে (বা রান করতে হবে source ~/.bashrc) প্রয়োজন হতে পারে ।

এখান থেকে, আপনি কেবল কল করতে পারেন lsc, যা আপনার আউটপুটটি দেবে যা আপনার ইচ্ছা:

রঙিন আউটপুট এর স্ক্রিনশট


আশ্চর্যজনক ছেলেরা, আমি প্রায় এটিই চাই ;-) সিরিয়াসলি, যদিও আমি আরও একটি মোচড় যুক্ত করতে এবং ফাইলটির নাম রঙিন করতে চাই। ls -al --color = স্বয়ংক্রিয়রূপে এটি করা হবে তবে আমি যদি কেবল উপরের সমাধানগুলিতে --color বিকল্পটি যুক্ত করি তবে রঙ কোডগুলি ছিঁড়ে গেছে বলে মনে হচ্ছে। সেগুলি রাখতে কি আমরা বিশ্রী পেতে পারি?
পিরেক্স

দ্বিতীয় মন্তব্য, এটি কৌতূহলের বাইরে: উত্তরে আমি আমার মূল প্রশ্নে উল্লেখ করেছি, দেখে মনে হচ্ছে 10 বেসেটম উপরের কোনওটি ব্যবহার করে নি, এবং এখনও রঙিন কলাম রয়েছে। আমি ভাবছি কারণ যদি তিনি এলএস, বা কোনও অভিনব স্মার্ট টার্মিনাল ব্যবহার করেন?
পিরেক্স

@ পিরক্স উত্তরের বর্ণটি স্ট্যাক এক্সচেঞ্জ সফ্টওয়্যার দ্বারা প্রয়োগ করা হয়েছে। এটি তাদের টার্মিনাল থেকে আসছে না। এটি কেবল কারণ একটি কোড ব্লকে আউটপুট আটকানো হয়েছিল এবং প্রশ্নটিতে একটি ব্যাশ ট্যাগ ছিল যা স্বয়ংক্রিয়ভাবে প্রশ্ন-উত্তরগুলির যে কোনও কোড ট্যাগগুলিতে বাশ সিনট্যাক্স হাইলাইট করার চেষ্টা করে ... যা এই ক্ষেত্রে আসলে ভুল। একই কারণে কোডটিতে থাকা স্ট্রিংগুলি আমার জবাবে লাল, যদিও আমি ইচ্ছাকৃতভাবে সেগুলি রঙ করি নি।
বব

1
@ পিরক্স ইউজ --color=always। যতক্ষণ না আপনি ফাইলের নাম কলামে ( $9আমার উদাহরণে) বিভিন্ন রঙ প্রয়োগ করেন না, ততক্ষণ awkতাদের এগুলি পাস করা উচিত।
বব

@ প্যারিক্স সাইড নোট, --color=alwaysএকটি জিএনইউ এক্সটেনশন তাই আপনি যদি কোনও নন-জিএনইউ সিস্টেমে থাকেন (যেমন ম্যাকোস, অন্যান্য বিএসডি) আপনাকে জিএনইউ সংস্করণ ইনস্টল করতে হবে বা বিকল্প ব্যবহার করতে হবে ।
বব

6

এটি ls -alFলাল রঙের দ্বিতীয় কলামটি , নীল মধ্যে অষ্টম এবং তৃতীয়টি কালো রঙের মধ্যে মুদ্রণ করবে :

ls -alF | awk -v black=$(tput setaf 0) -v red=$(tput setaf 1) -v blue=$(tput setaf 4) '{$2=red $2; $3= blue $3; $9=black $9} 1'

এটি কেবল উদাহরণ হিসাবে তৈরি। আপনি এটি আপনার হৃদয়ের সামগ্রীতে কাস্টমাইজ করতে পারেন।

যারা তাদের কোড পছন্দ করেন তাদের পক্ষে একাধিক লাইনে ছড়িয়ে পড়ে:

ls -alF | awk -v black=$(tput setaf 0) \
    -v red=$(tput setaf 1) \
    -v blue=$(tput setaf 4) \
    '{
        $2=red $2
        $3= blue $3
        $9=black $9
     }

     1'

বিস্তারিত

tputআপনার টার্মিনালের জন্য বিভিন্ন ধরণের নিয়ন্ত্রণ কোড উত্পন্ন করার একটি ইউটিলিটি। উদাহরণস্বরূপ, tput setaf nঅগ্রভাগের রঙটি nযেখানে n0 থেকে 7 পর্যন্ত হতে পারে সেট করে

0  Black
1  Red
2  Green
3  Yellow
4  Blue
5  Magenta
6  Cyan
7  White

আপনি এখানেtput এর রঙ ক্ষমতা সম্পর্কে আরও পড়তে পারেন ।

Awk কোড সংজ্ঞায়িত ভেরিয়েবল black, redএবং blueযে টার্মিনাল কোডগুলি, কালো, লাল, নীল যথাক্রমে ধারণ করে। আমরা যে কলামটি রঙিন করতে চাই তার শুরুতে এই কোডগুলি স্থাপন করা হয়।

একটি কৌশলটি হ'ল রঙ কোডগুলি তাদের নিজেরাই রিসেট হয় না। সুতরাং, আপনি এক লাইনে শেষ রঙটি যা কিছু নির্দিষ্ট করুন, অন্য বর্ণের কমান্ড সুনির্দিষ্ট না করে, পরের লাইনের জন্য ডিফল্ট রঙ হবে be


1
হু, ভেরিয়েবলগুলি সংজ্ঞায়নের জন্য ভাল কল। আপনি জানতেন না যে আপনি ভিতরে থেকে এটি করতে পারেন awk! আমি আপনাকে কলাম প্রান্তিককরণ সংরক্ষণ করার জন্য প্যাটার্নটি অন্তর্ভুক্ত করার পরামর্শ দিচ্ছি :)
বব

@ Bob এবং, আমি ব্যবধানটি FPATসঠিক রাখার জন্য আপনার কৌশলটি পছন্দ করি ।
1024
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.