CygWin:grep 命令显示一些“二进制文件巧合”消息

Sop*_*rez 1 cygwin grep

我一直在谷歌上搜索这个,但是,也许由于我的 CygWin/Windows 的西班牙语版本,我一直无法找到解决方案。
我安装了最新的(2014 年 12 月)CygWin 32 位,它的grep命令似乎存在一些问题。

如您所知,CygWin shell 可以运行 Windows 和 Linux 命令,因此我尝试过滤我的 services list 命令的结果,结果如下:

$ sc query state= all | grep "stopped" -i
Coincidencia en el fichero binario (entrada estándar)
Run Code Online (Sandbox Code Playgroud)

我认为此消息翻译为:Binary file match (standard input)

如果我从Windows shell尝试(仅使用 Windows 命令):

C:\Users\Luis-> sc query state= all | find "stopped" /i 
        ESTADO                       : 1  STOPPED
        ESTADO                       : 1  STOPPED
        ESTADO                       : 1  STOPPED
        ESTADO                       : 1  STOPPED
        ESTADO                       : 1  STOPPED
Run Code Online (Sandbox Code Playgroud)

...我得到了正确的结果。

这是 CygWin 嵌入式 grep 版本:

$ grep -V
grep (GNU grep) 2.21
Copyright (C) 2014 Free Software Foundation, Inc.
Licencia GPLv3+: GPL de GNU versión 3 o posterior
Run Code Online (Sandbox Code Playgroud)

通过下载UnxUtils并使用其 grep 32bit-Windows 版本,我找到了某种解决方法

$ PathToUNXUtils="/cygdrive/d/Utilidades/UnxUtils/"

$ "$PathToUNXUtils"grep -V
grep (GNU grep) 2.5.1
Copyright 1988, 1992-1999, 2000, 2001 Free Software Foundation, Inc.

$ sc query state= all | "$PathToUNXUtils"grep "stopped" -i | more.com
        ESTADO                       : 1  STOPPED
        ESTADO                       : 1  STOPPED
        ESTADO                       : 1  STOPPED
        ESTADO                       : 1  STOPPED
        ESTADO                       : 1  STOPPED
        ESTADO                       : 1  STOPPED
Run Code Online (Sandbox Code Playgroud)

但是,嗯...我认为解决这个问题的适当方法是使原始 CygWin 的 grep 版本正常工作。

这里发生了什么?我应该下载并编译最新的 grep 版本作为最后的希望吗?

Dav*_*ill 5

如何grep包含一些二进制数据的文本文件?

句法

grep [options] PATTERN [FILE...]

grep [options] [-e PATTERN | -f FILE] [FILE...]

选项

...

-a

--text

像处理文本一样处理二进制文件;这相当于--binary-files=text选项。

使用上述选项将允许 grep 忽略任何妨碍grep按预期工作的奇怪字符。

所以以下应该工作:

sc query state= all | grep "stopped" -i --text
Run Code Online (Sandbox Code Playgroud)

或者:

sc query state= all | grep "stopped" -a -i
Run Code Online (Sandbox Code Playgroud)

源 StackOverflow answer如何 grep 包含一些二进制数据的文本文件?by paxdiablogrep - 搜索特定文本的文件。