Regex 使用sed在单个记录中替换

Regex 使用sed在单个记录中替换,regex,awk,sed,Regex,Awk,Sed,我正在自动创建安全策略,我有以下记录,包括源/dst IP、src/dst/zone、策略名称和端口。 我可以使用awk轻松地移动记录并在它们之间插入文本,但当我需要修改单个记录并保持其余记录不变时,我就卡住了。 如下图所示,在第3条记录中,我需要将“.”替换为“u”和“/”替换为“-”,因为在策略名称中不支持“.”和“/” net-10.1.24.0/23 net-10.20.0.0/27 net-10.1.24.0/23_net-10.20.0.0/27 vpn-zone in

我正在自动创建安全策略,我有以下记录,包括源/dst IP、src/dst/zone、策略名称和端口。 我可以使用awk轻松地移动记录并在它们之间插入文本,但当我需要修改单个记录并保持其余记录不变时,我就卡住了。 如下图所示,在第3条记录中,我需要将“.”替换为“u”和“/”替换为“-”,因为在策略名称中不支持“.”和“/”

net-10.1.24.0/23  net-10.20.0.0/27  net-10.1.24.0/23_net-10.20.0.0/27   vpn-zone    internal-zone-servers   udp-123
net-10.1.24.0/23  net-10.20.0.0/27  net-10.1.24.0/23_net-10.20.0.0/27   vpn-zone    internal-zone-users grp-app-ldap
net-10.3.223.8/29 net-10.20.0.0/27  net-10.3.223.8/29_net-10.20.0.0/27  dmz-zone1   internal-zone-users tcp-389
net-10.1.194.64/26 net-10.20.0.64/27    net-10.1.194.64/26_net-10.20.0.64/27    dmz-zone2   internal-zone-servers   tcp-8080
我需要做一些事情,比如:

net-10.1.24.0/23    net-10.20.0.0/27  net-10_1_24_0-23_net-10_20_0_0-27 vpn-zone    internal-zone-servers   udp-123

到目前为止,我获得了相同的结果,但将第三条记录保存到一个新文件中,用sed替换“.”和“/”,然后使用“粘贴文件1文件2”将它们连接在一起。也可以通过脚本来完成。但我希望您能就更智能、更简单的单线awk/sed解决方案提供建议

我会在第三个字段上进行两次替换,然后打印该行:

 awk '{gsub("[.]","_",$3);gsub("[/]","-",$3); print $0}' policy.txt
net-10.1.24.0/23 net-10.20.0.0/27 net-10_1_24_0-23_net-10_20_0_0-27 vpn-zone internal-zone-servers udp-123
net-10.1.24.0/23 net-10.20.0.0/27 net-10_1_24_0-23_net-10_20_0_0-27 vpn-zone internal-zone-users grp-app-ldap
net-10.3.223.8/29 net-10.20.0.0/27 net-10_3_223_8-29_net-10_20_0_0-27 dmz-zone1 internal-zone-users tcp-389
net-10.1.194.64/26 net-10.20.0.64/27 net-10_1_194_64-26_net-10_20_0_64-27 dmz-zone2