单行grep

Pha*_*ani 13 linux grep sed awk

我有一个脚本,可以在一行中流式传输模式(没有换行符)。我想grep stock_ticker在该行中找到并输出它。现在脚本永远不会结束,基本上是无限循环。

我认为如何解决这个问题的另一种方法可能是将输入流分成几行并将其通过管道传输到 grep。据我所知,你可以grep输出-但是按我的理解,我觉得一切从grepsedawk通过读行线。

无论如何,我可以改变这种行为并解决这个问题吗?

./a.out | grep 'stock_ticker'
Run Code Online (Sandbox Code Playgroud)

当前输出Memory exhausted. 这是因为 grep 在吐出输出之前逐行读取。我想改变这种行为。任何想法如何?

Tim*_*m B 15

如果没有换行符,grep 会缓冲所有输入,以便它可以向您显示字符串出现的“行”。

两个问题:

  • 你需要相邻的内容吗?
  • 是否有空格或其他字符分隔标记?

如果您不需要相邻内容的上下文并且有空格分隔标记,只需使用 tr 将空格转换为换行符:

./a.out | tr ' ' '\n' | grep 'stock_ticker'
Run Code Online (Sandbox Code Playgroud)

如果您想要相邻的内容,只需添加选项之一-C -A-B到 grep 命令。这让 grep 在搜索模式中的股票代码之前和/或之后显示“行”。