2009-12-02 56 views
9

我需要grep整個目錄中的字符串,並且我得到了大約50個結果。我想爲每一行的第二行着色,無論是文字顏色還是背景顏色。最好是一個腳本,我可以將任何命令的輸出傳遞給它,並使其吐出相同的(儘管是彩色的)輸出。在bash中替換輸出線的簡單方法

回答

13

不是很漂亮,但做的伎倆:

(這個保存到foo.bashgrep 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

很整齊,也可以用作功能,避免第二個腳本。 – 2009-12-02 09:07:24

+3

我喜歡這個,但是忘記了之後重置: echo -en'\ e [0m'; – naught101 2009-12-02 12:00:02

+0

@ naught101好點,現在修復。 – Kimvais 2009-12-02 14:21:35

4

Perl安裝在許多系統上。你可以把它替代了你:

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

在Perl $.可以$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

這是爲了描述我假定的包裝線? 此shell腳本使用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 2009-12-02 12:03:20