首页 > 解决方案 > 如何在一行中找到 ip 并将其替换为 bash 脚本?

问题描述

我有这样的文件

www       IN       A       192.168.10.1
webmail   IN       A       192.168.10.2
mail      IN       A       192.168.10.3

我想编写一个像这样获得 3 个输入的 bash 脚本

./script.sh network.com www 192.168.10.10

和脚本是

project=$1
server=$2
ip=$3
h=$(awk -F "$server       IN       A" '{print $2}' /home/forward.$project)
sed -i "s/$h/$ip/"

我想找到以第二个输入开头的行并用第三个输入替换(ip),但我的脚本不起作用。

标签: bashshellawksed

解决方案


您可以选择 sed 中的行并进行正则表达式替换。

project=$1
server=${2//./\\.}  # escape '.' to avoid problems with sed if $server contains some
ip=$3
sed  -E "/^$server /s/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/$ip/" "$1"

推荐阅读