GREP#u选项='--颜色=始终';导致非打印字符

GREP#u选项='--颜色=始终';导致非打印字符,grep,non-printing-characters,Grep,Non Printing Characters,我的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中,执行

我的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。

您看到的字符对应于更改终端中文本颜色的代码。通常,您希望
grep
仅当其输出到交互式终端时才产生颜色。要做到这一点,就要改变

export GREP_OPTIONS='--color=always'


正如@Joni所指出的,您需要将“始终”替换为“自动”,如果(且仅当)输出直接写入终端且该终端能够显示彩色输出,则该选项将突出显示匹配字符串。否则,它将不会用乱七八糟的字符破坏输出

但是,将该行为设置为默认行为的更好方法是将其放入
.bash_配置文件
(或
.bashrc
,或保留自定义设置的任何位置):

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

grep
将替换为:

grep --colour=auto

我觉得这很有帮助。但是……请引用一些有关GREP_选项的文档:“此变量指定要放在任何显式选项前面的默认选项。由于这会在编写可移植脚本时产生问题,因此在将来的GREP版本中将删除此功能,如果使用此功能,GREP将发出警告。请改用别名或脚本。”来源:
grep
grep --colour=auto