Tôi đang cố gắng grep luồng văn bản trực tiếp từ netcat
nhưng nó không hoạt động với tôi:
netcat localhost 9090 | grep sender
trả lại không có gì, nhưng tôi chắc chắn rằng nó nên.
Nếu tôi chuyển hướng netcat
đầu ra thành một tệp và thêm một số độ trễ (mô phỏng môi trường thực) - thì nó hoạt động:
$ (sleep 5; cat netcat_output; sleep 5) | grep sender
{"jsonrpc":"2.0","method":"GUI.OnScreensaverDeactivated","params":{"data": "shuttingdown":false},"sender":"xbmc"}}
Tôi cũng đã cố gắng để thêm --line-buffered
nhưng không thành công.
Tôi đã làm gì sai?
Biên tập:
Tôi nhận thấy vấn đề tương tự với sed
, đầu ra là trống rỗng.
Nhưng, ví dụ, hexdump
chuyển đổi văn bản thành hex trực tiếp:
$ 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|
netcat -z localhost 9090 | grep sender
grep
có lẽ đang chờ đợi vô tận cho một dòng mới. cat
hoạt động vì grep
sẽ nhận được EOF nếu không phải là một dòng mới, ít nhất. Có thể thử awk
với {
RS?
stdbuf -o0 netcat localhost 9090 | grep sender
(lấy từ đây )