如何从输出多个值的程序通过管道/重定向到仅接受一个值的程序,并对所有输出每次执行一次
我正在尝试处理来自 traceroute 的 IP 地址,该地址写入磁盘上名为 td 的文件,之后我执行
grep -o '[0-9 ]\+\.[0-9]\+\.[0-9]\+\.[0-9]*[0-9]*[0-9]' td | uniq
获取唯一 IP 地址列表。 获取该地址的地理位置数据
接下来我可以通过lynx -dump http://api.hostip.info/get_html.php?ip=8.8.8.8
但是现在我如何提供多个输出将第一个文件转换为第二个文件,而无需写入磁盘上的另一个文件。
顺便说一句,我想知道是否可以完全删除文件 td 并以某种方式将 traceroute 输出直接传输到 grep 。
I am trying to process IP addresses from traceroute,which writes to a file called td on disk,after which I do a
grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]*[0-9]*[0-9]' td | uniq
to get the list of unique IP addresses. Next i can get the geolocation data for the address by
lynx -dump http://api.hostip.info/get_html.php?ip=8.8.8.8
But now how do I feed the multiple outputs of the first into the second without needing to write to another file on the disk.
As an aside I was wondering if i could remove the file td completely and pipe traceroute output directly to grep somehow.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用命令替换和
for
循环:另请注意,您的
uniq
可能无法工作,因为它期望对输入进行排序。相反,您可以使用sort -u
。You can use command substitution and a
for
loop as:Also note that your
uniq
might not work as it expects the input to be sorted. Instead you can use asort -u
.您可以使用 shell
for
循环吗?您可以将
$(cat td)
替换为$(traceroute| grep -o '[0-9]\+\.[0-9]\+\.[ 0-9]\+\.[0-9]*[0-9]*[0-9]' | uniq)
以避免中间文件td
。Can you use a shell
for
loop?You can replace
$(cat td)
with$(traceroute <options> | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]*[0-9]*[0-9]' | uniq)
to avoid the intermediate filetd
.