Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 仅从txt文件中提取ip地址并将其放入一行_Linux_Bash - Fatal编程技术网

Linux 仅从txt文件中提取ip地址并将其放入一行

Linux 仅从txt文件中提取ip地址并将其放入一行,linux,bash,Linux,Bash,我有一个txt文件,里面有跟踪路由和它在表单上的位置 追踪路由到188.164.206.1(188.164.206.1),最多30跳,60字节 包 1 83.212.10.1 (83.212.10.1) 3.257 ms 4.571 ms * 2 192.168.199.1 (192.168.199.1) 5.497 ms 3.171 ms 5.537 ms 3 ihu-1-gw.eier.access-link.grnet.gr (194.177.208.13) 1

我有一个txt文件,里面有跟踪路由和它在表单上的位置

追踪路由到188.164.206.1(188.164.206.1),最多30跳,60字节 包

 1  83.212.10.1 (83.212.10.1)  3.257 ms  4.571 ms *

 2  192.168.199.1 (192.168.199.1)  5.497 ms  3.171 ms  5.537 ms

 3  ihu-1-gw.eier.access-link.grnet.gr (194.177.208.13)  11.188 ms  13.018 ms  11.305 ms

 4  wind.gr-ix.gr (176.126.38.9)  14.421 ms  12.267 ms  14.714 ms
追踪路由到194.39.121.182(194.39.121.182),最多30跳,60字节 包

 1  83.212.10.1 (83.212.10.1)  3.257 ms  4.571 ms *

 2  192.168.199.1 (192.168.199.1)  5.497 ms  3.171 ms  5.537 ms

 3  ihu-1-gw.eier.access-link.grnet.gr (194.177.208.13)  11.188 ms  13.018 ms  11.305 ms

 4  wind.gr-ix.gr (176.126.38.9)  14.421 ms  12.267 ms  14.714 ms
1 ec2-50-112-0-84.us-west-2.compute.amazonaws.com(50.112.0.84) 2.026毫秒1.986毫秒1.969毫秒

2100.64.1.149(100.64.1.149)1.757毫秒100.64.1.171(100.64.1.171) 2.006毫秒100.64.1.157(100.64.1.157)2.772毫秒

3***

4***

5 205.251.232.226(205.251.232.226)2.324 ms 205.251.232.166 (205.251.232.166)2.332 ms 205.251.232.226(205.251.232.226)2.988 ms

我正在尝试制作一个脚本,它将读取文件的所有行,并且只复制
(…)
中的ip地址,并将它们传输到一行。因此,每个追踪路线将只有一条线路。 例如,上述跟踪路由将变为

83.212.10.1 192.168.199.1 194.177.208.13 176.126.38.9

我想不出任何明显的方法来做这件事,提前谢谢

这应该是你想要的

awk -F'[()]' '/^ / {printf "%s ", $2}'
FS
使用标准值:

awk '/^ / {gsub(/[()]/, "", $3); printf "%s ", $3}'
或者根本不使用正则表达式:

awk '/^ / {printf "%s ", substr($3, 2, (length($3) - 2))}'
编辑:正确处理同一文件中的多个跟踪路由输出

awk -F'[()]' '/^ / {printf "%s ", $2; next} /^[^[:space:]]/{print ""}'

@我不认为
**
应该在输出中…@TomFenech是的,我不确定。这是一个选择,要么删除它们,要么销毁输出,要么留下它们,然后添加到所需的输出中。我错误地认为他们没有尝试标记该行,因为他们没有标记跟踪路由输出。Thnks为了快速响应,问题是txt文件中有许多跟踪路由,如果我运行你的命令,所有的追踪路线都将在一条线上传输,我希望所有的追踪路线都在一条线上。@Xenakiskotas已修复。我非常感谢你的帮助,我非常感谢你的帮助。