私はbash sedを使用してファイルセット(例:10.1.1.x => 10.2.2.x-19)のIPアドレスを置き換えます。
file1: 10.1.1.29 => 10.2.2.10,
file2: 10.1.1.30 => 10.2.2.11,
file3: 10.1.1.31 => 10.2.2.12,
など。
私はほとんどそれをしました:
for file in ifcfg* ; do sed -e "s/10.1.1./10.2.2./" $file >tmp/$file ; done
ただし、最後のアドレス位置(x => x-19)を計算して置き換える方法はわかりません。
本当に簡単かもしれません...
ベストアンサー1
これを行うには、sedの代わりにawkを使用することをお勧めします。
awk -F. '{printf ("%d.%d.%d.%d\n",$1,$2,$3,$NF-19)}'
またはあなたの例に従って
awk -F. '/10.1.1/ {printf ("10.2.2.%d\n",$1,$2,$3,$NF-19)}'
または
for file in ifcfg*
do
awk -F. '/10.1.1/ {printf ("10.2.2.%d\n",$1,$2,$3,$NF-19)}' $file >tmp/$file
done
別の行を保持し、これがx
置換される行の最後の要素であると仮定するには、次のようにします。
for file in ifcfg*
do
awk -F. '/10.1.1/ {printf ("%s.%d.%d.%d\n",$1,2,2,$NF-19)}
!/10.1.1/ {print $0}' $file > tmp/$file
done