[英]Using sed to substitute in a single record
我正在自动执行安全策略创建,并且具有以下记录,包括源/ dst IP,src / dst / zone,策略名称和端口。 我可以轻松地移动记录,并使用awk在它们之间插入文本,但是当我需要修改单个记录并使其余记录保持不变时,我遇到了麻烦。 如下所示,在第三条记录中,我需要替换“。” 用“ _”表示,“ /”用“-”表示,原因是“。”。 和“ /”在策略名称中不受支持。
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
到目前为止,我获得了相同的结果,但是将第3条记录保存到一个新文件中,并替换为“”。 和“ /”与sed,然后使用“ paste file1 file2”将它们连接在一起。 也可以通过脚本来完成。 但我希望您可以就更智能,更简单的单行awk / sed解决方案提供建议。
我会在第三个字段上进行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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.