2009-12-02 11 views
9

文字列のディレクトリ全体をgrepする必要があり、約50件の結果が得られます。私はテキストの色か背景の色のいずれかの2行目を色づけしたいと思います。最高のスクリプトは、私は任意のコマンドの出力をパイプすることができ、それは同じ(ただし、色付き)出力を吐き出すようになります。bashで代替出力行を表示する簡単な方法

答えて

13

非常にきれいしかしトリックしない:

foo.bashにこれを保存し、grep whatever wherever | ./foo.bashを行う)

#!/bin/bash 
while read line 
do 
    echo -e "\e[1;31m$line" 
    read line 
    echo -e "\e[1;32m$line" 
done 
echo -en "\e[0m" 

ここでは、list of color codes in bashを見つけることができます。

+1

ための擬似コードとしてこれを扱う、ライン内のバックスラッシュなどマングルすることの警告を有する 、また2番目のスクリプトを回避する機能として使用することができます。 –

+3

私はこれが好きですが、後でリセットするのを忘れました: echo -en '\ e [0m'; – naught101

+0

@ naught101良い点、今修正されました。 – Kimvais

4

多くのシステムにPerlがインストールされています。あなたはあなたのために、それは別のかもしれない:あなたが読みやすさを好む場合はPerl $.

grep -r whatever somedir/ | perl -pe '$_ = "\033[1;29m$_\033[0m" if($. % 2)' 

$INPUT_LINE_NUMBERで置換することができます。

2

ここではPythonで同じです。

import sys 
for line_number,line in enumerate(sys.stdin.readlines()): 
    print '%s[1;3%dm%s%s[0m' % (chr(27),(line_number % 2+1),line,chr(27)), 
2

これは折り返し線を描くためのものですか? このシェルスクリプトは、256 colorパレットの背景色 を使用して、grep - colorが行う可能性がある他の強調表示を妨げません。

#!/bin/sh 
c=0 
while read line; do 
    [ $(($c%2)) -eq 1 ] && printf "\033[48;5;60m" 
    printf "%s\033[0m\n" "$line" 
    c=$(($c+1)) 
done 

これはとてもニート再実装

+0

Hah私が色について知っていれば、おそらくこれを必要としないでしょうが、どちらも良いことです。思慮深い解決に感謝します。 – naught101

関連する問題