我正在自动创建安全策略,我有下面的记录,包括source / dst IP,src / dst / zone,策略名称和端口。 我可以轻松地移动记录并使用awk在它们之间插入文本,但是当我需要修改单个记录并保持其余部分相同时,我会陷入困境。 如下所示,在第3条记录中,我需要替换“。”用“ - ”和“/”用“ - ”表示“。”政策名称中不支持“/”。
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然后使用“paste file1 file2”将它们连接在一起。它也可以通过脚本完成。但我希望你能提出更智能,更简单的一线awk / sed解决方案的建议。
答案 0 :(得分:2)
我会在第三个字段上进行2次替换,然后打印该行:
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