Tinydns 数据文件使用 bash 更改 ip

Tinydns 数据文件使用 bash 更改 ip

我正在使用 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 或其他方法)?

答案1

您可以使用 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>

答案2

我认为避免尝试使用 monkey-patch 更为干净data;相反,data从多个文件生成你的文件,其中一个文件仅包含动态记录。

然后,从 bash,您可以执行echo "+sub3.example.org:285.117.214.234:14400" >data.dynamic; make或类似操作。

示例 Makefile:

data.cdb : data 
    tinydns-data

data : data.static data.dynamic
    cat data.static data.dynamic >data

答案3

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

相关内容