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

nau*_*101 12 bash shell command-line colors

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

Kim*_*ais 15

不是很漂亮,但有诀窍:

(将此保存到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"
Run Code Online (Sandbox Code Playgroud)

在这里,您可以找到bash中的颜色代码列表.

  • 我喜欢这个,但你后来忘了重置:echo -en'\ e [0m'; (3认同)
  • 循环后可能更好地重置它. (2认同)
  • @JayC:这不仅仅是间距.使用原始版本,输入中的通配符将变为输出中的文件列表; 例如,`echo'*"| ./ foo.bash`. (2认同)
  • 如果行数是奇数,这也将打印额外的一行。我认为你可以通过将循环体的后两行更改为: read line && echo -e "\e[1;32m$line" (所以如果读取行失败,它不会回显任何内容) (2认同)

Jas*_*ith 5

Perl 安装在许多系统上。您可以将其替换为您:

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

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