শিরোনাম ধরনের এটি সব বলছে: আমি ভালো কিছু আউটপুট যারা ঝরঝরে রঙ্গিন কলাম পেতে চাই ls -al
হিসাবে, বলো 10basetom এর উত্তর থেকে এই প্রশ্নের ।
sed
বা awk
একটি সন্নিবেশ ANSI পালাবার ক্রম ।
শিরোনাম ধরনের এটি সব বলছে: আমি ভালো কিছু আউটপুট যারা ঝরঝরে রঙ্গিন কলাম পেতে চাই ls -al
হিসাবে, বলো 10basetom এর উত্তর থেকে এই প্রশ্নের ।
sed
বা awk
একটি সন্নিবেশ ANSI পালাবার ক্রম ।
উত্তর:
এটি সঙ্গে 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
, যা আপনার আউটপুটটি দেবে যা আপনার ইচ্ছা:
--color=always
। যতক্ষণ না আপনি ফাইলের নাম কলামে ( $9
আমার উদাহরণে) বিভিন্ন রঙ প্রয়োগ করেন না, ততক্ষণ awk
তাদের এগুলি পাস করা উচিত।
এটি 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
যেখানে n
0 থেকে 7 পর্যন্ত হতে পারে সেট করে
0 – Black
1 – Red
2 – Green
3 – Yellow
4 – Blue
5 – Magenta
6 – Cyan
7 – White
আপনি এখানেtput
এর রঙ ক্ষমতা সম্পর্কে আরও পড়তে পারেন ।
Awk কোড সংজ্ঞায়িত ভেরিয়েবল black
, red
এবং blue
যে টার্মিনাল কোডগুলি, কালো, লাল, নীল যথাক্রমে ধারণ করে। আমরা যে কলামটি রঙিন করতে চাই তার শুরুতে এই কোডগুলি স্থাপন করা হয়।
একটি কৌশলটি হ'ল রঙ কোডগুলি তাদের নিজেরাই রিসেট হয় না। সুতরাং, আপনি এক লাইনে শেষ রঙটি যা কিছু নির্দিষ্ট করুন, অন্য বর্ণের কমান্ড সুনির্দিষ্ট না করে, পরের লাইনের জন্য ডিফল্ট রঙ হবে be
awk
! আমি আপনাকে কলাম প্রান্তিককরণ সংরক্ষণ করার জন্য প্যাটার্নটি অন্তর্ভুক্ত করার পরামর্শ দিচ্ছি :)
FPAT
সঠিক রাখার জন্য আপনার কৌশলটি পছন্দ করি ।