簡體   English   中英

使用sed替代單個記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM