以下は、変更するファイルの一部です。 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アドレスの3番目のオクテットのサブネットのみを置き換えます(例: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つのファイルからすべての置換項目を検索し、検索中にそれらを置き換えてテキスト処理を高速化できることをお勧めします。
答え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