我一直在谷歌上搜索这个问题,但可能是因为我的 CygWin/Windows 版本是西班牙语,所以我没能找到解决方案。
我有最新的版本(2014 年 12 月)CygWin 32 位安装,但其命令好像存在一些问题grep
。
如您所知,CygWin shell 可以运行 Windows 和 Linux 命令,因此我尝试过滤我的服务结果列出命令,结果如下:
$ sc query state= all | grep "stopped" -i
Coincidencia en el fichero binario (entrada estándar)
我认为此消息应翻译为:Binary file match (standard input)
。
如果我尝试从Windows 外壳(仅使用 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
...我得到了正确的结果。
这是 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
我发现了一些解决方法通过下载Unx工具类并使用其 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
但是,好吧......我认为解决这个问题的适当方法是让原始 CygWin 的 grep 版本正常工作。
这是怎么回事?我是否应该下载并编译最新的 grep 版本作为最后的希望?
答案1
如何 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
或者:
sc query state= all | grep "stopped" -a -i
来源 StackOverflow 答案如何 grep 包含一些二进制数据的文本文件?经过帕克斯迪亚布罗和grep—在文件中搜索特定文本。