`คำสั่ง '


11

มีคำสั่งที่สามารถใช้เพื่อเน้น (กับสีข้อความตัวหนาหรือกลับ - / เบื้องหน้า) สายอักขระที่เฉพาะเจาะจงใน stdin ในขณะที่ผ่านสายทั้งหมดเพื่อ stdout? ฉันกำลังคิดที่จะสร้างมันแต่ฉันจะใช้มันถ้ามันมีอยู่แล้ว คุณสมบัติที่พึงประสงค์:

  1. สตริงเน้นที่แยกจากกันจะถูกเน้นด้วยวิธีที่แตกต่างกันโดยอัตโนมัติ ตัวอย่างเช่นสตริงแรกจะถูกเน้นด้วยสีแดงที่สองในสีเขียวที่สามในสีฟ้าโดยไม่มีการกำหนดค่าด้วยตนเอง
  2. ตรวจจับการสนับสนุนสีและย้อนกลับไปที่วิธีการเน้นตัวหนา / กลับ / / อื่น ๆ ที่มีอยู่
  3. อนุญาตให้จับคู่ของนิพจน์ทั่วไปและสตริงตัวอักษร
  4. ทำสิ่งที่ฉลาดกว่าโดยเฉพาะถ้าการจับคู่ซ้อนทับกันเช่น "foobar" และ "barbar"
  5. ไม่มีการแก้ไขใด ๆ ระหว่าง stdin และ stdout ยกเว้นการเพิ่มรหัสสี


Ooo คำถามที่ดี ฉันต้องการสิ่งนี้และลงเอยด้วยการเขียนอะไรบางอย่าง แต่มันก็แค่สตริงคงที่ที่ใช้รหัสสีมันไม่มีคุณสมบัติใด ๆ ที่คุณระบุไว้
Michael Mrozek

แทนที่จะเขียนยูทิลิตีใหม่มันก็ยอดเยี่ยมมากที่เห็นสิ่งนี้เป็นส่วนเสริมของ grep
mattdm

1
ปรัชญายูนิกซ์ที่เหมาะสมจะเป็นยูทิลิตี้ใหม่ที่สามารถส่งผ่านจาก grep ไม่เพียง แต่กระแสอื่น ๆ เช่นกัน ฉันสงสัยว่ามีอย่างน้อยหนึ่งโมดูล Perl ที่อาจทำสิ่งนี้ให้คุณได้แม้ว่า ...
Shadur

1
@Gilles: คำถามนั้นมีขอบเขต จำกัด มากขึ้น ในความเป็นจริงการอ่านเป็นหนึ่งในเหตุผลที่ฉันสร้างคำถามนี้ขึ้นมา - เพื่อขอคำตอบที่กว้างกว่าและยืดหยุ่นกว่า
l0b0

คำตอบ:


4

อาจเป็น Generic Colouriser (grc) ของ Radovan Garabíkหรือไม่? มันคาดว่าไฟล์ config เป็นอาร์กิวเมนต์และทำงานร่วมกับ regexp ของ จึงไม่ค่อนข้างไม่มีการกำหนดค่า แต่คุณสามารถใช้การทดแทนกระบวนการกระบวนการ ( <(list)) ดังนั้นโดยวิธีทั้งหมดโดยไม่ต้องกำหนดค่าด้วยตนเอง :-)


ในการชี้แจงโดยไม่จำเป็นต้องเปิดหน้า (และเพื่อให้สามารถค้นหาได้) "this one" == Colouriser ทั่วไป ; grcและgrcat ... ขอบคุณฉันชอบมัน
Peter.O

grcมีสคริปต์ผู้ช่วย: grcat. นี่คือตัวอย่างของการระบายสีตัวอักษรทั้งหมดในสีแดง ขั้นตอนที่ 1: ตั้งค่าไฟล์กำหนดค่า: printf "regexp=[A-Z]\ncolours=red\n" > ~/.grc/red-caps ขั้นตอนที่ 2; ใช้มัน: echo Hello World | grcat red-caps... ไดเรกทอรี man 3 ระบุไดเรกทอรี config 3 ที่ค้นหาจากนั้นแนะนำ (?) ว่าไฟล์ config สามารถเป็นพา ธ สัมบูรณ์ แต่วิธีสุดท้ายในการค้นหาไฟล์ปรับแต่งนี้ใช้ได้กับพา ธ สัมพัทธ์สำหรับฉันเท่านั้น (grc รุ่น 1.3)
Peter.O

5

อยู่เพื่อช่วยชีวิต!

คุณสามารถปรับปรุงสิ่งนี้ (ตามที่ต้องการจริงๆ) แต่มันใช้งานได้ดี

$ cat >~/bin/hilight <<EOF
#!/bin/bash
while [ $# -gt 0 ]
do
 COMANDO=$COMANDO's/'$1$'/\033[01;'$2$'m\033[K\\0\033[m\033[K/g\n'
 shift;shift;
done

sed -e "$COMANDO"
EOF

เพื่อความง่าย hilight จึงรับคู่การโต้แย้ง (คู่แรกคู่ที่สองสี) ในสคริปต์นี้ attrib จะเป็นตัวหนาเสมอ

อ่าน man console_codes (Graphic Rendition) เพื่อดู secuences การหลีกเลี่ยงสีหรือลองสิ่งนี้

for attrib in $(seq 0 12); do
  for color in $(seq 30 37) $(seq 40 47) $(seq 90 97); do
    printf %b " $attrib $color:\033[$attrib;${color}mhi, dudes\033[m"
  done
done

มันมีข้อเสียเปรียบที่สำคัญเช่นเดียวกับการใช้งานนี้:

$ dmesg | hilight \\[ 34 ] 34

แต่นี่ไม่ใช่ทั้งหมด:

$ dmesg | hilight \\[ 34 ] 34 [[:digit:]] 31

เพราะ [: หลัก:] ค้นหาตัวเลขในการหลบหนีที่เกิดจากการสนับสนุนครั้งก่อนหน้า

สิ่งที่ต้องการ:

$ cat /var/log/kern.log | hilight kernel 31 a 34 et 33

จะทำงานได้ตามปกติยกเว้น

การใช้คำสั่ง time ฉันพบการเพิ่มขึ้นนี้ตามเวลาที่ผ่านไปสี่ครั้งซึ่งไม่มากเกินไป

คุณสามารถแทนที่คำสั่ง sed ด้วย parser อื่น ๆ ที่คุณชอบหรือตรงกับความต้องการของคุณ (awk, ฯลฯ ... )


2

ท่านสามารถใช้ egrep กับรูปแบบที่ตรงกับทุกบรรทัดของอักขระที่ไม่สามารถพิมพ์ได้เช่น:

dmesg | egrep --color "swap|$"

1

clide ใช้ งานได้ดี ฉันใช้มันใน RHEL 6.2 จากที่เก็บ EPEL


+1 สำหรับเครื่องมือที่ดีมาก น่าเสียดายที่มันไม่มีคุณสมบัติทั้งหมดที่ขอ
l0b0

1

หากเวอร์ชันของคุณgrepมาพร้อมกับสีคุณสามารถใช้การเปลี่ยนแปลง regexp เพื่อทำให้ grep เน้นข้อความและจับคู่ทุกบรรทัดเพื่อไม่ให้มีสิ่งใดถูกแยกออก ต่อไปนี้ควรทำเคล็ดลับ:

<your command> |grep "highlightme\|^"

0

ตามที่คุณกล่าวถึงในลิงก์grep --color=alwaysจะใช้งานได้สำหรับรูปแบบเดียว ที่กล่าวว่าฉันไม่เชื่อว่าเครื่องมือดังกล่าวมีอยู่


0

ผมใช้http://em.readthedocs.org/ ติดตั้งง่ายบนแพลตฟอร์มต่างๆเนื่องจาก Python เรียบง่ายและใช้งานได้ดี


ยินดีต้อนรับสู่ Unix & Linux Stack Exchange! ในขณะที่สิ่งนี้อาจตอบคำถามในทางทฤษฎีมันก็ควรที่จะรวมส่วนสำคัญของคำตอบที่นี่และให้ลิงค์สำหรับการอ้างอิง
slm

1
ตามศูนย์ช่วยเหลือ :“ อย่างไรก็ตามคุณต้องเปิดเผยความร่วมมือในคำตอบของคุณ” ในกรณีที่คุณเป็นคนเดียวกันกับ Igor Kalnitsky ผู้เขียนemโปรดพูดคำตอบของคุณให้ชัดเจนว่าคุณไม่ใช่ผู้ใช้ แต่เป็นผู้เขียนเครื่องมือที่แนะนำ
จัดการ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.