如何用Bash脚本实现端口行前置所属IP/FQDN并格式化输出
Bash脚本实现方案
方案1:单行awk命令(直接运行,无需临时文件)
完全匹配你的所有需求,执行后直接输出目标结果:
awk '/\./{prefix=$0;next} /tcp|udp/{gsub("/"," ");print prefix $0}' file.txt
逻辑说明:
- 匹配到包含
.的行时,将当前行内容存为prefix前缀变量,直接跳过后续处理读取下一行 - 遇到端口行时,先判断是否包含
tcp/udp关键词,符合条件则把行内的/替换为空格,最后输出前缀变量拼接处理后的端口行 - 无对应端口的IP/FQDN行会被自动过滤,因为没有后续端口行触发输出逻辑
方案2:封装为可复用Bash脚本
新建process_port_list.sh文件,写入以下内容:
#!/bin/bash # 参数校验 if [ $# -ne 1 ]; then echo "用法: $0 <待处理文件路径>" exit 1 fi target_file="$1" if [ ! -f "$target_file" ]; then echo "错误:文件 $target_file 不存在" exit 1 fi # 执行处理逻辑 awk '/\./{prefix=$0;next} /tcp|udp/{gsub("/"," ");print prefix $0}' "$target_file"
给脚本加执行权限:chmod +x process_port_list.sh
运行方式:./process_port_list.sh file.txt
注:你给出的期望输出中
dev.anothersite.co.uk:433 tcp为笔误,上述命令运行后会输出正确的dev.anothersite.co.uk:443 tcp
内容的提问来源于stack exchange,提问作者omin
相关产品推荐
相关产品推荐

