【发布时间】:2009-12-02 08:46:09
【问题描述】:
我需要 grep 整个目录的字符串,我得到大约 50 个结果。我想为每一行着色,文本颜色或背景颜色。最好是一个脚本,我可以将任何命令的输出通过管道传输到,这样它就可以输出相同的(尽管是彩色的)输出。
【问题讨论】:
标签: bash shell command-line colors
我需要 grep 整个目录的字符串,我得到大约 50 个结果。我想为每一行着色,文本颜色或背景颜色。最好是一个脚本,我可以将任何命令的输出通过管道传输到,这样它就可以输出相同的(尽管是彩色的)输出。
【问题讨论】:
标签: bash shell command-line colors
不是很漂亮,但可以解决问题:
(将其保存到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。
【讨论】:
echo "*" | ./foo.bash.
Perl 安装在许多系统上。你可以让它为你替代:
grep -r whatever somedir/ | perl -pe '$_ = "\033[1;29m$_\033[0m" if($. % 2)'
如果您更喜欢可读性,在 Perl 中,$. 可以替换为 $INPUT_LINE_NUMBER。
【讨论】:
这是为了描绘我认为的换行线? 这个 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
这有一个警告,行内的反斜杠等将被破坏, 所以将其视为重新实现的伪代码
【讨论】:
这里在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)),
【讨论】: