(可能)grep 和 less 的行为不一致

(可能)grep 和 less 的行为不一致

我有一个 utf-8 文件,其中包含一些土耳其文本。 (我的系统是MacOSX)

$ file -I foo.merge
$foo.merge: text/plain; charset=utf-8

当我尝试使用查看一些土耳其语特定字符时grep,没有问题:

$ grep 'Emiroğlu' foo.merge
EMİROĞLU    Emiroğlu+Noun+A3sg+Pnon+Nom Emiroğlu+Noun+Prop+Noun+A3sg+P3sg+Nom   Emiroğlu+Noun+Prop+Noun+A3sg+Pnon+Nom   NOTFOUND

我还可以使用命令查看该文件,less没有任何问题。

但是,如果我尝试执行以下操作,土耳其字符将无法正确显示:

$ grep 'Emir' foo.merge | less
EMİROĞLU        ESC[1;35;40mESC[KEmirESC[mESC[Koğlu+Noun+A3sg+Pnon+Nom  ESC[1;35;40mESC[KEmirESC[mESC[Koğlu+Noun+Prop+Noun+A3sg+P3sg+Nom        ESC[1;35;40mESC[KEmirESC[mESC[Koğlu+Noun+Prop+Noun+A3sg+Pnon+Nom        NOTFOUND

或者以下也不起作用:

$grep 'Emir' foo.merge > foo2.out
$less foo2.out

可能是什么问题呢?以下是一些附加信息:

$ locale
LANG="en_US.utf-8"
LC_COLLATE="en_US.utf-8"
LC_CTYPE="en_US.utf-8"
LC_MESSAGES="en_US.utf-8"
LC_MONETARY="en_US.utf-8"
LC_NUMERIC="en_US.utf-8"
LC_TIME="en_US.utf-8"
LC_ALL="en_US.utf-8"

答案1

土耳其文字看起来不错。然而 grep 已将颜色代码插入到输出中。

选择:

  • 向 grep添加选项--color=never(删除颜色)。
  • 向 less添加选项-R(告诉 less 解释 ASCII 颜色代码)。

相关内容