在 sed 中使用变量时,它会替换整行,而不仅仅是匹配的字符串

在 sed 中使用变量时,它会替换整行,而不仅仅是匹配的字符串

我是 bash 的新手,我一直在尝试理解其他类似的帖子,但我不确定他们是否做了我需要的事情。

当我不使用变量而只是输入我想要搜索和替换的内容时,它工作得很好。但是当我传递变量时,脚本也会删除字符串“host1”。该部分之前是一个查找包含“host1”的文件的 for 循环。 arg1、2 和 3 是 $1、$2、$3。

input="$f"   

while read -r line  
 do  
 sed "/"$arg2"/ s=192.168.10.*="$arg3"="  

done < "$f"

我只想替换包含字符串“host1”的行中的 ip

10.10.10.10 host1 

答案1

假设$arg2设置为host1$arg3设置为10.10.10.10那么您的两个命令都将从输出中sed删除。host1

问题是因为您正在匹配192.168.10.*.*最后的 会匹配到行尾的任何内容并将其替换为10.10.10.10.

尝试:

arg2=host1
arg3=10.10.10.10
sed "/${arg2}/ s/192\.168\.10\.[0-9]\+/${arg3}/" /path/to/file 

相关内容