以下是要更改的文件的摘录: 可以使用 awk 或 sed...任何实用程序都适合模式匹配。
rhts-mgr hostname g05-rhts01
rhts-mgr ntp-server-ip-addr 10.113.XX.31
rhts-mgr ntp-redundant-server-ip-addr 10.113.XX.32
rhts-mgr extern-iface ip-addr 10.113.XX.129
rhts-mgr extern-iface broadcast-addr 10.113.XX.255
rhts-mgr extern-iface default-gw 10.113.XX.1
我尝试过 awk 、sed 组合的变体,但我对此仍然陌生。我正在尝试将上面的文件条目更改为下面的文件条目
rhts-mgr hostname g08-rhts01
rhts-mgr ntp-server-ip-addr 10.113.55.31
rhts-mgr ntp-redundant-server-ip-addr 10.113.55.32
rhts-mgr extern-iface ip-addr 10.113.55.129
rhts-mgr extern-iface broadcast-addr 10.113.55.255
rhts-mgr extern-iface default-gw 10.113.55.1
逻辑是:
- 在 中搜索 rhts-mgr 主机名,并将 $3 中的任何主机名条目从 g*-rhts* 替换为 g08-rhts*。
- 仅替换 IP 地址中第三个八位字节中的子网:例如从 10.113.XX.31 到 10.113.55.31
像下面这样的东西会有所帮助
awk '/^rhts-mgr hostname/ {<replace $3 with g08-rhts[0-9][0-9]>}; print}' file
awk '/^rhts-mgr extern-iface ip-addr/ {<replace $4 10.113.XX.129 with 10.113.55.129>}; print}' file
我有 100 多个文件需要编辑,每个文件都需要完成此编辑。因此,如果我们能够通过对一个文件进行所有替换扫描并在扫描期间替换它来实现更快的文本处理,那就太好了。
答案1
sed
:
sed -E '
s/^(rhts-mgr hostname +g)[0-9]+(\-rhts.*)$/\108\2/;
s/^(rhts-mgr.* 10\.113\.)[0-9]+(\..*)$/\155\2/;
s/^(rhts-cntrl.* 10\.113\.)[0-9]+(\..*)$/\153\2/
' file
珀尔:
perl -ne '
s/^(rhts-mgr hostname\s+g)\d+(\-rhts.*)$/${1}08${2}/;
s/^(rhts-mgr.* 10\.113\.)\d+(\..*)$/${1}55${2}/;
s/^(rhts-cntrl.* 10\.113\.)\d+(\..*)$/${1}53${2}/;
print
' file