ווטסאפ - לינוקס, BSD, קוד פתוח ותוכנה חופשית בעברית. Whatsup - Linux, BSD, open source and free software in Hebrew

 
 
  כניסת חברים · רישום · שכחתי סיסמה  
tux the penguin
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
עידולא בפורום כעת ת.הצטרפות: 28/11/2003 · הודעות: 1816 · מיקום: dev/null/
 

הודעה פורסם: 03/07/2008 - 14:35
נושא ההודעה: צביעת טקסט שיוצא כפלט של פקודה

ראשית, כדאי להכיר את הדגל 'color--' של grep, הדגל הנ"ל מאפשר לצבוע את המילים שאנו מחפשים בתוך השורה ש grep מוצא.

קוד:

$ echo "hello world" | grep --color world
hello <red>world</red>

(כמובן ש world נצבע באדום ולא מוקף בטאגים...)
הצבע הדיפולטי הוא אדום, אבל ניתן לשנות אותו באמצעות משתנה הסביבה GREP_COLORS בגירסאות grep חדשות (2.5.3) או באמצעות GREP_COLOR בגרסאות ישנות יותר.
הסינטקס המדיוק של המשתנים הללו הוא טיפה מסובך, אז אני אפנה אתכם מכאן ל man page של grep.

יש שתי בעיות עם הגישה הזאת, (א) היא מחייבת שימוש ב grep ו (ב) אפשר לצבוע רק בצבע בודד.

פתרון נחמד (לדעתי) הוא סקריפטון קטן שכתבתי:
קוד:

#!/bin/bash
word=$1
color_name=`echo $2 | tr 'A-Z' 'a-z'`
case "$color_name" in
    black)
        color=30;
        ;;
    red)
        color=31;
        ;;
    green)
        color=32;
        ;;
    yellow)
        color=33;
        ;;
    blue)
        color=34;
        ;;
    magenta)
        color=35;
        ;;
    cyan)
        color=36;
        ;;
    white)
        color=37;
        ;;
    *)
        color=31;
        ;;
esac

while read line
do
    echo $line | sed -e "s/$word/$(printf '\e[%d;1m&\e[m' $color)/g"
done


יש לשמור את הסקריפט במקום תחת ה PATH, לקרוא לו colorize ולתת לו הרשאות ריצה.

כעת לאופן השימוש:
קוד:

$ echo "hello world" | colorize world
hello <red>world</red>

$ echo "hello world" | colorize world red
hello <red>world</red>

$ echo "hello world" | colorize hello green | colorize world red
<green>hello</green> <red>world</red>

$ echo "hello world" | colorize "w.*d" red
hello <red>world</red>
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
Vedderלא בפורום כעת ת.הצטרפות: 15/05/2005 · הודעות: 614 ·
 

הודעה פורסם: 03/07/2008 - 15:50
נושא ההודעה:

אפשר גם להשתמש בסקריפט AWK פשוט.

קוד:

function esc(x) { return "\x1b[" x "m" }

{if (/^(Index:|\-\-\-|\+\+\+) /)
        print esc(32) $0 esc(0)
else if (/^\+/)
        print esc(36) $0 esc(0)
else if (/^\-/)
        print esc(35) $0 esc(0)
else if (/^@@ \-[0-9]+(,[0-9]+)? \+[0-9]+(,[0-9]+)? @@/)
        print gensub(/^(@@[^@]*@@)([ \t]*)(.*)/,
        esc(33) "\\1" esc(0) "\\2" esc(35) "\\3" esc(0), "")
else
        print
}


זה במקרה סקריפט שצובע פלט של diff -u
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
הצגת הודעות מלפני:     
מעבר אל:  
כל הזמנים הם GMT + 2 שעות
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
PNphpBB2 © 2003-2004 

תוכן הדיון

  1. עידו
  2. Vedder

Google Ads