在文件中搜索模式并替换内联列中的子字符串

在文件中搜索模式并替换内联列中的子字符串

以下是要更改的文件的摘录: 可以使用 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

逻辑是:

  1. 在 中搜索 rhts-mgr 主机名,并将 $3 中的任何主机名条目从 g*-rhts* 替换为 g08-rhts*。
  2. 仅替换 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

相关内容