web-dev-qa-db-ja.com

カラーで印刷するPipableコマンド?

私はbashスクリプトに少し慣れていないので、指定された色で印刷するプログラムまたは組み込みコマンドがパイプされるかどうか疑問に思っていますか?または、そうするためのエコー引数がありますか?

私ができるように:

echo Hi | commandhere -arguement blue

そして、それは青で「こんにちは」を印刷しますか?

7
TenorB

カラー印刷自体のユーティリティは知りませんが、次のようなシェル関数を使用して簡単に実行できます。

# colorize stdin according to parameter passed (GREEN, CYAN, BLUE, YELLOW)
colorize(){
    GREEN="\033[0;32m"
    CYAN="\033[0;36m"
    GRAY="\033[0;37m"
    BLUE="\033[0;34m"
    YELLOW="\033[0;33m"
    NORMAL="\033[m"
    color=\$${1:-NORMAL}
    # activate color passed as argument
    echo -ne "`eval echo ${color}`"
    # read stdin (pipe) and print from it:
    cat
    # Note: if instead of reading from the pipe, you wanted to print
    # the additional parameters of the function, you could do:
    # shift; echo $*
    # back to normal (no color)
    echo -ne "${NORMAL}"
}
echo hi | colorize GREEN

他の色を確認したい場合は、 このリスト をご覧ください。そこから任意の色のサポートを追加できます。この関数で正しい名前と値を使用して追加の変数を作成するだけです。

10
elias

Bashスクリプトで使用するこの関数を作成しました。

#指定した色でエコーする機能
 echoincolor(){
 case $ 1 in 
 "red")tput setaf 1 ;; 
 "green ")tput setaf 2 ;; 
" orange ")tput setaf 3 ;; 
" blue ")tput setaf 4 ;; 
" purple ")tput setaf 5 ;; 
 "cyan")tput setaf 6 ;; 
 "gray" | "grey")tput setaf 7 ;; 
 "white")tput setaf 8 ;; 
 esac 
 echo "$ 2"; 
 tput sgr0 
} 

次に、このように呼び出しますechoincolor green "This text is in green!"

代替printfを使用

#指定した色で印刷する関数
 colorprintf(){
 case $ 1 in 
 "red")tput setaf 1 ;; 
 "green ")tput setaf 2 ;; 
" orange ")tput setaf 3 ;; 
" blue ")tput setaf 4 ;; 
" purple ")tput setaf 5 ;; 
 "cyan")tput setaf 6 ;; 
 "gray" | "grey")tput setaf 7 ;; 
 "white")tput setaf 8 ;; 
 esac 
 printf "$ 2"; 
 tput sgr0 
} 

次に、このように呼び出しますcolorprintf green "This text is in green!"

Noteechoは末尾の改行を提供し、printfはしません。

3
HarlemSquirrel

これらのどれよりもはるかにエレガントな答えがあります:

Sudo apt-get install grc

(これはgrcatもインストールします)

今実行します:

echo "[SEVERE] Service is down" | grcat ~/conf.username

conf.myusernameの内容:

regexp=SEVERE
colours=on_red
count=more

(何らかの理由で、「引用符の間のすべて」の正しい正規表現が見つかりません)

1

私は、Webから取得したhilite.plという名前のこの古いスクリプトを使用しますが、すでに「不明な作成者」行を使用しています。

#!/usr/bin/Perl -w
### Usage: hilite <ansi command> <target string>
### Purpose: Will read text from standard input and perform specified highlighting
### command before displaying text to standard output.
### License: GNU GPL
# unknown author 

$|=1; # don't buffer i/o
$command = "$ARGV[0]";
$target = "$ARGV[1]";
$color = "\e[" . $command . "m";
$end = "\e[0m";

while(<STDIN>) {
    s/($target)/$color$1$end/;
    print $_;
}

次に、パイプでそれを使用して、regexp/PCREを使用してログ出力などを「ハイライト」します。

 echo 'hello color world!!' | hilite.pl 34 "[Hh]el[^ ]*" | hilite.pl 43 .orld | hilite.pl 32 "\scolor\s"

これは、こんにちは、青、緑の色、黄色の背景の世界でペイントします

カラーリストを表示できます(必要に応じて、bash式を{01..255}に展開できます)。

for i in {01..10}  {30..49} {90..110}  ; do echo $i | hilite.pl $i $i ; done
1
higuita