在bash中为交替输出行着色的简单方法

时间:2009-12-02 08:46:10

标签: bash shell command-line colors

我需要为一个字符串grep整个目录,我得到大约50个结果。我想为每个第二行着色,无论是文字颜色还是背景颜色。 Best是一个脚本,我可以将任何命令的输出传递给它,并且它会吐出相同的(尽管是彩色的)输出。

4 个答案:

答案 0 :(得分:14)

不是很漂亮,但有诀窍:

(将此保存到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 :(得分:4)

Perl安装在许多系统上。你可以替换它:

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

如果您更喜欢可读性,Perl $.可以替换为$INPUT_LINE_NUMBER

答案 2 :(得分: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)),

答案 3 :(得分: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

这有一点需要注意,行内的反斜杠等会被破坏, 所以将其视为重新实现的伪代码