ชนิดชื่อกล่าวว่ามันทั้งหมด: ผมอยากจะได้รับบรรดาคอลัมน์สีเรียบร้อยของการส่งออกของบางอย่างเช่นls -al
การพูดในขณะที่คำตอบของ 10basetomเพื่อคำถามนี้
ชนิดชื่อกล่าวว่ามันทั้งหมด: ผมอยากจะได้รับบรรดาคอลัมน์สีเรียบร้อยของการส่งออกของบางอย่างเช่นls -al
การพูดในขณะที่คำตอบของ 10basetomเพื่อคำถามนี้
คำตอบ:
นี้เป็น doable 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
ควรผ่านพวกเขาไป
--color=always
เป็นส่วนขยายของ GNU ดังนั้นหากคุณบนระบบที่ไม่ใช่ของกนู (เช่น MacOS, BSDs อื่น ๆ ) คุณจะต้องติดตั้งอย่างใดอย่างหนึ่งรุ่น GNU หรือใช้ทางเลือก
วิธีนี้จะพิมพ์คอลัมน์ที่สองของ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
ที่มีรหัสขั้วสีดำ, สีแดง, สีฟ้าและตามลำดับ รหัสเหล่านี้จะถูกวางไว้ที่จุดเริ่มต้นของคอลัมน์ใดก็ตามที่เราต้องการให้สี
เคล็ดลับอย่างหนึ่งคือรหัสสีไม่ได้รีเซ็ตด้วยตนเอง ดังนั้นสีสุดท้ายที่คุณระบุในหนึ่งบรรทัดจะเป็นเช่นไรเว้นแต่ว่ามีการระบุคำสั่งสีอื่นเป็นสีเริ่มต้นสำหรับบรรทัดถัดไป
awk
! ฉันขอแนะนำให้คุณรวมรูปแบบเพื่อรักษาแนวคอลัมน์ด้วยเช่นกัน :)
FPAT
อุบายของคุณในการรักษาระยะห่างให้ถูกต้อง