2

我的 bash 版本:

GNU bash, version 3.2.49(22)-release (i686-pc-cygwin)
Copyright (C) 2007 Free Software Foundation, Inc.

在我的 .bashrc 中,我有:

export GREP_OPTIONS='--color=always'

要重现该问题,请创建一个文件 test.txt 并写几行:

test1: apple
test2: orange
test3: cherry

在 bash 中,执行 grep:

grep "test" test.txt > 1

当我检查结果时,我得到如下信息:

~ > cat -v 1
^[[01;31m^[[Ktest^[[m^[[K1: apple
^[[01;31m^[[Ktest^[[m^[[K2: orange
^[[01;31m^[[Ktest^[[m^[[K3: cherry

关于这个问题的任何想法?顺便说一句,我已经设置了 fileformats=unix。

4

2 回答 2

9

您看到的字符对应于更改终端中文本颜色的代码。通常,您只想grep在其输出到交互式终端时才生成颜色。为此,改变

export GREP_OPTIONS='--color=always'

export GREP_OPTIONS='--color=auto'
于 2013-07-14T15:43:52.983 回答
2

正如@Joni 所指出的,您需要将“always”替换为“auto”,这将在(且仅当)输出直接写入终端并且该终端能够显示彩色输出时突出显示匹配的字符串。否则它不会用杂乱的字符破坏输出。

但是,使该行为默认的更好方法是放入您的.bash_profile(或.bashrc,或您保留自定义设置的任何位置):

# grep auto colouring
my_grep_options=(--colour=auto)
alias grep='grep $my_grep_options'

它将始终将您的grep调用替换为其预先准备好的版本,因此无论何时键入:

grep

它将被替换为:

grep --colour=auto
于 2015-08-30T11:46:40.543 回答