我正在尝试使用grep来获取正则expression式结果,并将结果通过pipe道运行到运行开放端口的telnet到节点服务器。
grep收到的是连续的,但是间隔不同,命令从一个运行的程序中找出一个数字,然后通过远程login的pipe道。 下面是我的例子:
echo "TEST 1234\r\n" | grep -e "[0-9]{4}" | telnet 127.0.0.1 1234
我不能改变回声“恶搞”的string格式。 没有grep的echo成功发送string到telnet。 grep似乎没有发送到stdOut。
我期待telnet从pipe道接收数据,如:
1234 7645 8376
任何帮助如何实现这一目标?
我不知道你是如何得出grep不在stdout上打印输出的结论,那只是不正确的。
我build议你通过一次添加pipe道的一个步骤来testing这个问题,看看问题出在哪里。
你会首先发现你的echo命令在最后打印了\r\n (你可能需要echo -e ),而且你的grep命令不会打印任何东西(因为你的模式实际上不匹配)。
但是,如果你修复了这个模式( grep -e "[0-9]\{4\}"或grep -E "[0-9]{4}" ),你会注意到它打印整行所有匹配的行,不只是匹配的部分(你可能希望grep -o )。
像这样的东西似乎是你的pipe道更合理的开始:
echo -e "TEST 1234\r\n" | grep -o -e "[0-9]\{4\}"
你应该可以继续从那里(但是,我会build议考虑使用nc而不是telnet )。
您必须将grep更改为:
grep -e "[0-9]\{4\}"
你不需要telnet来实现,Bash shell具有内置的这个function,例如:
exec {stream}<>/dev/tcp/127.0.0.1/1234 printf "TEST 1234\r\n" >&${stream} grep -o "[0-9]\{4\}" <&${stream}