使用AWK或SED更换IP

使用AWK或SED更换IP,awk,sed,Awk,Sed,我必须在脚本中替换IP,因此我使用了一个变量来存储awk的输出,例如: existing_ip=$(awk --field-separator '=' '/10.171.0.231/ { print $2; }' file.txt) 另一方面,我也接受用户输入,如: read -p "What is the IP address to be replace: " new_ip echo -e "New IP: ${new_ip}" 现在,在下一步中

我必须在脚本中替换IP,因此我使用了一个变量来存储awk的输出,例如:

existing_ip=$(awk --field-separator '=' '/10.171.0.231/ { print $2; }' file.txt)
另一方面,我也接受用户输入,如:

read -p  "What is the IP address to be replace: " new_ip

echo -e "New IP: ${new_ip}"
现在,在下一步中,当我尝试用sed或awk命令替换IP时,我将面临一个问题。我尝试过使用下面的命令,但都不起作用

awk -v s="$existing_ip"  '{gsub(/10.171.[0-9].{1,3}.[0-9]/, s)}1'

sed -i "s/${existing_ip}/${new_ip}/g"

非常感谢您的帮助。

除了在注释中提到您必须指定一个输入文件外,模式
10.171.[0-9]。{1,3}.[0-9]
可以匹配,例如
10a171b0cdef2
,因为您必须转义点才能逐字匹配

如果转义点,量词
{1,3}
将在匹配末尾的一个数字后执行。所以你会在第三部分匹配一个数字,在第四部分匹配1-3个数字

cat file.txt

This is ip 10.171.1.111 and this is ip 10.172.0.231
比如说

existing_ip="10.171.0.231"
awk -v s="$existing_ip"  '{gsub(/10\.171\.[0-9]\.[0-9]{1,3}/, s)}1' file.txt
输出

This is ip 10.171.0.231 and this is ip 10.172.0.231

您需要为awk和sed命令指定一个输入文件。例如,
sed-i“s/${existing_ip}/${new_ip}/g”file.txt
。sed命令替换输入文件中的给定模式。欢迎使用SO,感谢分享您的工作,请您在问题中分享几行输入和预期输出的示例,以使其更清楚,谢谢。