strings命令是从二进制输入文件中提取可打印字符串的方便工具。我经常用它来处理文件。但是如果我想要流媒体呢?
一个用例是对特定字符串的二进制数据流进行抓取。我试着data-source | strings -- - | grep needle
查看-
是否将stdin视为文件类型,但这不起作用,strings
只是等待。
如果您查看strings
的帮助:
Usage: strings [option(s)] [file(s)]
Display printable strings in [file(s)] (stdin by default)
您可以看到,如果没有参数,stdin是默认行为。通过添加-
,行为似乎改变了,这很奇怪,但我也能够重现那个结果。
所以正确的做法是:
data-source | strings | grep needle
在评论中,你问为什么不是strings datasource |grep -o needle
?
如果你可以安排这个命令,使datasource
是一个流,它可能会工作,但通常更容易安排使用|
。
例如,下面的代码在zsh中大致等价。如果不是zsh,你必须想办法在你选择的shell中做到这一点。
strings <(tail -f syslog) | grep msec
tail -f syslog | strings | grep msec