Grep 正则表达式 Stdout 到 telnet

Grep 正则表达式 Stdout 到 telnet

我正在尝试使用 grep 来获取正则表达式结果,并将结果动态传输到运行开放端口到节点服务器的 telnet。

grep 接收来自正在运行的程序的连续但间隔不同的命令,然后 grep 出一个数字,并通过 telnet 将其传输出去。以下是我的示例尝试:

echo "TEST 1234\r\n" | grep -e "[0-9]{4}" | telnet 127.0.0.1 1234

我无法更改 echo“spoof”的字符串格式。没有 grep 的 echo 确实成功将字符串发送到 telnet。grep 似乎没有发送到 stdOut。

我期望 telnet 从管道接收数据,例如:

1234
7645
8376

对于如何实现这一点有什么帮助吗?

答案1

我不确定您是如何得出 grep 不会在 stdout 上打印其输出的结论的,这完全是不正确的。

我建议您通过一次添加管道的一个步骤来测试这一点,以查看问题发生的位置。
您首先会发现 echo 命令实际上\r\n在末尾打印(您可能想要echo -e),而 grep 命令没有打印任何内容(因为您的模式实际上不匹配)。

但是,如果您修复模式(grep -e "[0-9]\{4\}"grep -E "[0-9]{4}"),您会注意到它会打印所有匹配的行的整行,而不仅仅是匹配的部分(您可能需要grep -o)。

类似这样的事情似乎是你的管道更合理的开始:

 echo -e "TEST 1234\r\n" | grep -o -e "[0-9]\{4\}" 

您应该可以从那里继续(但是,我建议考虑使用nc而不是telnet)。

答案2

您必须将 grep 更改为:

grep -e "[0-9]\{4\}"

答案3

你不需telnet要这样做,Bash shell 已经内置了这个功能,例如:

exec {stream}<>/dev/tcp/127.0.0.1/1234
printf "TEST 1234\r\n" >&${stream}
grep -o "[0-9]\{4\}" <&${stream}

相关内容