का शीर्षक तरह यह सब कहते हैं: मैं की तरह कुछ के उत्पादन में से जो साफ रंग का कॉलम प्राप्त करना चाहते हैं ls -alके रूप में,, कहते हैं 10basetom का जवाब करने के लिए इस सवाल का ।
sedया awkएक ANSI एस्केप अनुक्रम डाल सकते हैं ।
का शीर्षक तरह यह सब कहते हैं: मैं की तरह कुछ के उत्पादन में से जो साफ रंग का कॉलम प्राप्त करना चाहते हैं ls -alके रूप में,, कहते हैं 10basetom का जवाब करने के लिए इस सवाल का ।
sedया awkएक ANSI एस्केप अनुक्रम डाल सकते हैं ।
जवाबों:
इसके साथ उल्लेखनीय है awk। दुर्भाग्य से, के प्रारूप ls -lअनिर्दिष्ट होने के बाद से, एक समाधान के साथ आना संभव नहीं है जो हर प्रणाली पर काम करेगा इसलिए कुछ समायोजन किस रंग का उपयोग करना है, इसके लिए कुछ प्रणालियों पर कॉलम आवश्यक होगा।
सबसे पहले, हम उपयोग किए गए मूल स्थानों को संरक्षित करना चाहते हैं ls -l। अन्यथा, कॉलम संरेखण गलत होगा। हम FPATविकल्प के साथ ऐसा कर सकते हैं , इस SO उत्तर के लिए धन्यवाद :
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जहां n0 से 7 तक हो सकते हैं
0 – Black
1 – Red
2 – Green
3 – Yellow
4 – Blue
5 – Magenta
6 – Cyan
7 – White
आप के बारे में अधिक पढ़ सकते हैं tputऔर उसका रंग क्षमताओं यहाँ ।
Awk कोड चर को परिभाषित करता है black, redऔर blueजिसमें क्रमशः काले, लाल और नीले रंग के लिए टर्मिनल कोड होते हैं। ये कोड हम जिस भी कॉलम को कलर करना चाहते हैं, उसकी शुरुआत में रखे जाते हैं।
एक चाल यह है कि रंग कोड अपने आप रीसेट नहीं होते हैं। इसलिए, जो भी अंतिम रंग आप एक पंक्ति पर निर्दिष्ट करेंगे, जब तक कि एक और रंग कमांड निर्दिष्ट न हो, अगली पंक्ति के लिए डिफ़ॉल्ट रंग हो।
awk! मेरा सुझाव है कि आप कॉलम संरेखण को संरक्षित करने के लिए पैटर्न भी शामिल करें :)
FPATरिक्ति को सही रखने के लिए आपकी चाल पसंद है।