使用AWK或SED更换IP
我必须在脚本中替换IP,因此我使用了一个变量来存储awk的输出,例如:使用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}" 现在,在下一步中
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,感谢分享您的工作,请您在问题中分享几行输入和预期输出的示例,以使其更清楚,谢谢。