2つのファイルがあり、最初のファイルはfile1
ルーター構成を含む1000行です。いくつかはこれです -
!
ipv6 prefix-list CCAV6 seq 5 permit 2217:AB23::/40
route-map DENY-ALL deny 11
!
ip pim sparse-mode
ipv6 address 2617:FB23:0:1::1/128
ipv6 ospf 1 area 0.0.0.0
など。 2 番目のファイルは、file2
ipv6 を ipv4 アドレスにマップすることです。それは次のとおりです -
2617:FB23:0:1::1/128 245.82.242.31/32
2217:AB23::/40 64.211.7.157/31
繰り返し交換できるようにしたいですfile1
。最初の列がfile2
一部と一致する場合は、file1
2番目の列に置き換える必要があります。file2
たとえば、処理後に表示されると予想される出力は次のとおりです。
!
ipv6 prefix-list CCAV6 seq 5 permit 64.211.7.157/31
route-map DENY-ALL deny 11
!
ip pim sparse-mode
ipv6 address 245.82.242.31/32
ipv6 ospf 1 area 0.0.0.0
を試してみましたが、awk
私が遭遇したすべてのオプションは、コピーする場所に関する事前の知識を必要としているように見え、最初の列の位置はプロセス全体で一定に保たれませんfile1
。いくつかのアイデアをいただきありがとうございます。
答え1
複数のスペース/タブフィールドの区切り文字がfile1
単一のスペースに置き換えられることについてあまり心配しない場合:
awk 'NR == FNR{a[$1]=$2; next};
{for (i=1; i<=NF; ++i) printf "%s%s", $i in a?a[$i]: $i, i == NF?"\n": " "}' file2 file1
生産する
!
ipv6 prefix-list CCAV6 seq 5 permit 64.211.7.157/31
route-map DENY-ALL deny 11
!
ip pim sparse-mode
ipv6 address 245.82.242.31/32
ipv6 ospf 1 area 0.0.0.0
答え2
次のスクリプトは、最初の2つの単語をそれぞれハッシュとして読み込み、IPV4をIPV6に置き換えて、他のパターンチェックを停止します。同じ行に2つのアドレスがあると思われる場合は、if (j>0) break
コードからそのアドレスを削除してください。
混合アドレスコード
#!/usr/bin/nawk -f
BEGIN{while (getline<"map"){w[$1]=$2}}
{for (a in w){
j=gsub(a,w[a])
if (j>0) break
}
print
}
マップファイル
2617:FB23:0:1::1/128 245.82.242.31/32
2217:AB23::/40 64.211.7.157/31
ホストファイル
!
ipv6 prefix-list CCAV6 seq 5 permit 2217:AB23::/40
route-map DENY-ALL deny 11
!
ip pim sparse-mode
ipv6 address 2617:FB23:0:1::1/128
ipv6 ospf 1 area 0.0.0.0
実装する
mixaddr hosts
!
ipv6 prefix-list CCAV6 seq 5 permit 64.211.7.157/31
route-map DENY-ALL deny 11
!
ip pim sparse-mode
ipv6 address 245.82.242.31/32
ipv6 ospf 1 area 0.0.0.0
ファタイ
答え3
#!/bin/bash
IFS=$'\n'
line=`cat ./file2`
for var in $line
do
string1=`echo $var |awk '{print $1}'`
string2=`echo $var |awk '{print $2}'`
sed -i "s#${string1}#${string2}#g" ./file1
done
file1
実行する前にバックアップが必要です。