私はbashスクリプトに少し慣れていないので、指定された色で印刷するプログラムまたは組み込みコマンドがパイプされるかどうか疑問に思っていますか?または、そうするためのエコー引数がありますか?
私ができるように:
echo Hi | commandhere -arguement blue
そして、それは青で「こんにちは」を印刷しますか?
カラー印刷自体のユーティリティは知りませんが、次のようなシェル関数を使用して簡単に実行できます。
# 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
他の色を確認したい場合は、 このリスト をご覧ください。そこから任意の色のサポートを追加できます。この関数で正しい名前と値を使用して追加の変数を作成するだけです。
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!"
Note、echo
は末尾の改行を提供し、printf
はしません。
これらのどれよりもはるかにエレガントな答えがあります:
Sudo apt-get install grc
(これはgrcat
もインストールします)
今実行します:
echo "[SEVERE] Service is down" | grcat ~/conf.username
conf.myusername
の内容:
regexp=SEVERE
colours=on_red
count=more
(何らかの理由で、「引用符の間のすべて」の正しい正規表現が見つかりません)
私は、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