Bash

Tinydns 數據文件使用 bash 更改 ip

  • September 2, 2014

我正在使用 tinydns,需要動態更改數據文件中的一些 ip。我想為此使用 bash 腳本。

例如數據文件:

+sub1.example.org:282.196.222.245:14400
+sub2.example.org:278.179.280.253:14400
+sub3.example.org:285.117.214.234:14400

bash 腳本有兩個變數:

old="282.196.222.245"
new="127.0.0.1"

我期待這個結果:

+sub1.example.org:127.0.0.1:14400
+sub2.example.org:278.179.280.253:14400
+sub3.example.org:285.117.214.234:14400

將舊 ip 替換為新 ip 的最佳方法是什麼(使用 awk、sed 或 smth 其他)?

您可以使用 sed:

sed -i "s/$old/$new/g" filename

在這裡你有一個簡單的測試:

# echo "+sub1.example.org:282.196.222.245:14400" >> filename

# cat filename
+sub1.example.org:282.196.222.245:14400

# old=282.196.222.245
# new=127.0.0.1

# sed -i "s/$old/$new/g" filename

# cat filename
+sub1.example.org:127.0.0.1:14400<br>
awk -v "old=$old" -v "new=$new" '$2 == old {$2 = new} {print}' filename > tempfile && mv tempfile filename

或者

awk -v "old=$old" -v "new=$new" '$2 == old {$2 = new}1' filename > tempfile && mv tempfile filename

引用自:https://serverfault.com/questions/570413