让脚本找到所有包含 x 的行,将这些行添加到后面的每一行,除非该行中有另一个 x,此时重复

Have script find all lines containing x, prepend these lines to each line that follows unless the line has another x in it, at which point repeat

我有一个名为 file.txt 的文件,其中包含 IP 或 FQDN,后跟被发现打开的端口。我希望我的 bash 脚本在所有端口前加上它们关联的 IP/FQDN(在文件中总是在它们上面),用空格替换正斜杠,然后删除 IP/FQDN 行'与端口关联。

分解一下,我想:

  1. 阅读下一行
  2. 如果该行包含“.”在其中(IP 或 FQDN),将其添加到以下所有行中,除非:
  3. 如果下一行有一个“.”在其中(另一个 IP 或 FQDN),使该行成为新行以添加并重复所有后续行的过程
  4. 将所有“/”替换为“”(一个空格)
  5. 删除所有与端口无关的行(可能更容易只用 grep 查找“tcp”和“udp”,因为这将显示所有打开的端口以及关联的 IP/FQDN

为了方便起见,如果需要,我可以在流程中轻松创建一个 tmp 文件。我已经尝试了“while”和“if”的各种迭代,但似乎没有任何效果...!

例如:

cat file.txt

www.thisisawebsite.com:
80/tcp
443/tcp
500/udp
192.168.1.5:
80/tcp
dev.anothersite.co.uk:
22/tcp
443/tcp
5050/udp
21000/tcp
10.10.10.10:
4000/udp
8000/udp

然后,运行 bash 脚本,它应该变成:

www.thisisawebsite.com:80 tcp
www.thisisawebsite.com:443 tcp
www.thisisawebsite.com:500 udp
192.168.1.5:80 tcp
dev.anothersite.co.uk:22 tcp
dev.anothersite.co.uk:433 tcp
dev.anothersite.co.uk:5050 udp
dev.anothersite.co.uk:21000 tcp
10.10.10.10:4000 udp
10.10.10.10:8000 udp

感谢您的帮助。

看起来像是 awk 的工作:

awk -F/ '/\./ {d=[=10=]; next} {print d":", }'