如何grep netcat输出

Tomekceszke

我正在尝试grep的实时文本流netcat,但是对我来说不起作用:

netcat localhost 9090 | grep sender

什么也不会返回,但是我确定应该会返回。

如果我将netcat输出重定向到文件并添加一些延迟(模拟真实环境),则它可以工作:

$ (sleep 5; cat netcat_output; sleep 5) | grep sender

{"jsonrpc":"2.0","method":"GUI.OnScreensaverDeactivated","params":{"data": "shuttingdown":false},"sender":"xbmc"}}

我也尝试添加--line-buffered但没有成功。

我做错了什么?

编辑:

我注意到与相同的问题sed,输出为空。

但是,例如,hexdump将文本实时转换为十六进制:

$ netcat localhost 9090 | hexdump -C
00000000  7b 22 6a 73 6f 6e 72 70  63 22 3a 22 32 2e 30 22  |{"jsonrpc":"2.0"|
00000010  2c 22 6d 65 74 68 6f 64  22 3a 22 50 6c 61 79 65  |,"method":"Playe|
00000020  72 2e 4f 6e 50 6c 61 79  22 2c 22 70 61 72 61 6d  |r.OnPlay","param|
00000030  73 22 3a 7b 22 64 61 74  61 22 3a 7b 22 69 74 65  |s":{"data":{"ite|
00000040  6d 22 3a 7b 22 69 64 22  3a 36 2c 22 74 79 70 65  |m":{"id":6,"type|
00000050  22 3a 22 6d 6f 76 69 65  22 7d 2c 22 70 6c 61 79  |":"movie"},"play|
00000060  65 72 22 3a 7b 22 70 6c  61 79 65 72 69 64 22 3a  |er":{"playerid":|
00000070  31 2c 22 73 70 65 65 64  22 3a 31 7d 7d 2c 22 73  |1,"speed":1}},"s|
用户名

您可以使用read命令(bash内置)强制将字符一一读取:

netcat localhost 9090 | (
    cnt=0
    line=
    while read -N 1 c; do
        line="$line$c"
        if [ "$c" = "{" ]; then
            cnt=$((cnt+1))
        elif [ "$c" = "}" ]; then
            cnt=$((cnt-1))
            if [ $cnt -eq 0 ]; then
                printf "%s\n" "$line"
                line=
            fi
        fi
    done
) | grep sender

该脚本应打印所有带有balance{和的完整输出},但是您可以更改脚本以执行所需的任何操作。与几乎所有内容相比,此脚本在基准测试上效果不佳,但它非常简单,似乎对我有用。

请注意,您的测试样本没有匹配的{},因此,如果是实际输入的情况,则可能需要更改条件以打印行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何grep netcat输出

来自分类Dev

如何缩进grep的输出?

来自分类Dev

如何grep cURL的输出?

来自分类Dev

如何从git grep输出?

来自分类Dev

如何为grep输出着色

来自分类Dev

如何在Powershell中写入Netcat输出而没有在末尾附加新行?

来自分类Dev

如何检查grep是否没有输出?

来自分类Dev

如何grep我的xml文件并保存输出?

来自分类Dev

如何使grep用NULL字符分隔输出?

来自分类Dev

如何获得grep每条输出线的长度

来自分类Dev

如何使用grep搜索--help输出?

来自分类Dev

如何使用grep的输出进行ping

来自分类Dev

如何选择grep输出的特定部分?

来自分类Dev

如何使用grep搜索--help输出?

来自分类Dev

如何在Windows中“ grep”输出

来自分类Dev

如何从logstash输出中grep particulr字段

来自分类Dev

如何使用grep输出作为cd的路径?

来自分类Dev

如何使用grep的输出进行ping

来自分类Dev

如何使grep输出适合屏幕的字符宽度

来自分类Dev

如何在线放置grep尾随的输出?

来自分类Dev

如何在ls -a的输出中进行grep

来自分类Dev

如何查看使用grep过滤的输出?

来自分类Dev

如何在EOF中使用grep输出?

来自分类Dev

grep 命令输出,但如何查找特定块?

来自分类Dev

将netcat的输出写入文件

来自分类Dev

如何将Parallel Grep的输出附加到文件?

来自分类Dev

grep-如何输出进度条或状态

来自分类Dev

如何通过管道grep输出从python中的STDIN中读取

来自分类Dev

如何通过awk和grep“过滤”尾部输出?