我是 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