【问题标题】:Why does grep -a output to console?为什么 grep -a 输出到控制台?
【发布时间】:2017-02-27 01:42:48
【问题描述】:

grep -a 5 "SEARCHSTRING" FILE.txt 时,grep 似乎将文件搜索实时打印到控制台,我觉得这既有用又酷。但是,当简单地执行grep "SEARCHSTRING" FILE.txtgrep -i -n --color -C 5 "SEARCHSTRING" FILE.txt 时,我会在处理文件时得到通常的闪烁光标。

为什么在搜索文件时grep -a 会输出到控制台,如何在不使用-a 选项的情况下复制该行为?

【问题讨论】:

    标签: windows bash windows-7 grep cygwin


    【解决方案1】:

    请注意,您对grep 的多个问题都不是关于编程的,而且您似乎没有仔细阅读grep 的手册。 来自man grep我看到了:

      -a, --text
              Process a binary file as if it were text; this is equivalent  to
              the --binary-files=text option.
    

    所以它不会重定向输出,默认仍然是控制台。 据我所知,没有任何选项可以延迟输出。

    补充说明: grep -a 5 "SEARCHSTRING" FILE.txt 表示以二进制模式打开输入并在文件SEARCHSTRINGFile.txt 中搜索字符串5;因此,您将获得比 grep "SEARCHSTRING" FILE.txt 更多的匹配项,而不是在 File.txt 中要求 SEARCHSTRING 。可能这就是您看到立即输出并延迟输出的原因吗?在第一种情况下,您可能有更多匹配项。您可以使用

    进行验证
    grep -a 5 "SEARCHSTRING" FILE.txt |wc -l 
    grep -i "SEARCHSTRING" FILE.txt |wc -l 
    

    并比较匹配的数量。 wc -l统计行数

    【讨论】:

    • 如果我们使用如此狭隘的编程定义,那么已经在 SO 上获得高度评价的 many bashgrep 问题也将是题外话。我在 SO 上发帖是因为此类问题由来已久,即使它们不被视为严格意义上的编程。
    • 撇开话题不谈,这似乎并不能回答这个问题。我已经阅读了-a 开关的文档以及许多其他的文档,我数不清了,但是我仍然不完全清楚它到底做了什么,以及当其他选项没有时是什么使它输出到控制台。
    • 在同一天问 3 次关于 grep 的问题不是关于编程,而是关于缺乏基本基础。 grep 默认是将输入(文件或标准输入)的匹配行输出到标准输出。 -a 选项不会更改标准输出。也许您应该先尝试一些教程,例如 http://www.uccs.edu/~ahitchco/grep/ 来理解这些概念。
    • 恕我直言,我看不出我问的问题数量与问题的题外话有什么逻辑关系。我问的每个问题都是独立的,每个问题的题外话都应该根据其内容来决定,而不是我的其他问题。正如已经证明的那样,关于 SO 的主题 bashgrep 问题有很多先例。至于教程和文档,我已经阅读并遵循了很多,但他们都没有解释为什么-a 打印到控制台和其他选项没有(到目前为止,你也没有)因此我在问的原因这个问题。
    • 您是指立即输出还是延迟输出?从我的角度来看,使用-a 和/或任何其他标志输出到控制台的时间没有差异。两者几乎都是即时的。
    猜你喜欢
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    相关资源
    最近更新 更多