我有一个脚本,可以在单行中流式传输模式(没有换行符)。我想grep
stock_ticker
在那一行中找到它并立即输出它。现在脚本永远不会结束,并且基本上无限循环。
我认为解决这个问题的另一种方法可能是将输入流分成几行并将其通过管道传递给 grep。我知道你可以grep
输出 - 但是根据我的理解,我发现从grep
, sed
,awk
逐行读取所有内容。
无论如何,我可以改变这种行为并为此努力吗?
./a.out | grep 'stock_ticker'
目前输出Memory exhausted
.这是因为 grep 在吐出输出之前逐行读取。我想改变这种行为。有什么想法吗?
答案1
如果没有换行符,grep 会缓冲所有输入,以便它可以显示字符串出现的“行”。
两个问题:
- 您需要相邻的内容吗?
- 是否有空格或其他字符分隔标记?
如果不需要相邻内容的上下文并且有空格分隔标记,只需使用 tr 将空格转换为换行符:
./a.out | tr ' ' '\n' | grep 'stock_ticker'
如果您想要相邻的内容,只需将选项之一添加到 grep 命令中-C
-A
即可。-B
这让 grep 在搜索模式中显示股票之前和/或之后的“行”。