我以前在 Windows XP 上的 cygwin 上成功使用 grep。突然间,现在当我运行 grep 时,它似乎永远不会结束。
miname@mycomputer /cygdrive/c/emacs
$ grep "lkjlkjlkjlkjlkjlkjlkjlkjlkjlkjlkj"
我搜索了谷歌,但没有找到与此相关的内容。我重启了电脑。我还检查了日志,但似乎只有安装日志(在 var/log 中)。我似乎记得我在安装 cygwin 时遇到了困难(我有一台相当封闭的工作电脑),所以宁愿不重新安装(如果确实可以解决问题的话)。
我该怎么做才能修复或调查我的问题?
编辑:读完答案后,我意识到我以为成功的事情其实是grep "asdfasdf" .
- 注意那个点!我没有做同样的事情。
答案1
没有实际问题。这里发生的事情是,由于您没有指定要grep
搜索的任何文件,因此它正在监听 STDIN 以查找要搜索的文本。这就是诸如 之类的管道的tail -f /var/log/messages | grep "error"
工作方式:该tail
命令将其输出发送到grep
的标准输入,并grep
仅打印与给定搜索字符串(在此示例中为“error”)匹配的行。
如果您grep
在没有文件的情况下调用它并且没有向它传输任何内容,它将从您的终端继承标准输入流,并监听您的键盘。(试试看!输入一些内容并按回车键,如果它与您为 grep 提供的搜索字符串匹配,您将看到它被回显。)要终止 grep 进程,请按 Control-C。要从它那里获得有用的输出,请将一个或多个文件作为命令行参数传递给它,例如,跟在搜索字符串后面grep "something" file.c file.h
,或者像tail
上面的例子一样将一些内容传输到它。
这就是 Unix grep 的工作方式,也是它一直以来的工作方式。如果您以前以这种方式调用 grep,而它的行为有所不同,那么您调用的不是 Cygwin 的 grep,而是其他某个实用程序,它恰好具有相同的名称,并且位于 Cygwin 之前的目录/bin
中$PATH
。