sed 替换 引用变量值,记录一个本身学习错误的地方。

先上脚本,脚本的目的是虚拟机克隆-链接克隆,而后修改ip这个搞定,修改hostname就很简单了shell

declare oldip
declare -i Aname
declare newip
oldip=`cat /etc/sysconfig/network-scripts/ifcfg-ens32 | grep IPADDR= | cut -b 8-22`
read -p "请输入用户IP:" Aname
newip="192.168.1.$Aname"
echo "用户旧ip为:$oldip"
echo "用户新ip为:$newip"
sed -i 's/IPADDR='"$oldip"'/IPADDR='"$newip"'/g' /etc/sysconfig/network-scripts/ifcfg-ens32
cat /etc/sysconfig/network-scripts/ifcfg-ens32 | grep IPADDRip

执行结果以下:虚拟机

[root@fyc001 ~]# ./ipset.sh
请输入用户IP:19
用户旧ip为:192.168.1.18
用户新ip为:192.168.1.19
IPADDR=192.168.1.19class

如今换为  变量

sed -i "s/IPADDR=$oldip/IPADDR=$newip/g" /etc/sysconfig/network-scripts/ifcfg-ens32sed

执行结果不变,而原先的是date

sed -i 's/IPADDR=$oldip/IPADDR=$newip/g' /etc/sysconfig/network-scripts/ifcfg-ens32搜索

没法执行。network

总结以下,参考资料引用

 一、sed命令使用双引号的状况下,能够使用$var(变量)直接引用:
  echo | sed "s/$RANDOM1/ $RANDOM2  /g" 

二、sed命令使用单引号的状况下,能够使用'"$var"'引用(单引号,而后双引号,变量):

  echo | sed 's/'"$RANDOM1"'/'" $RANDOM2 "' /g'

 

sed中执行外部命令。  一、sed命令使用单引号的状况下使用'`shell command`'或者'$(shell command)'引用命令执行的结果:  echo | sed 's/^/'`echo $RANDOM`'.rmvb_/g'  7700.rmvb_# 结果  # 上面的命令使用了旧式的命令替换,也能够采用新式的命令替换方法,以下:  echo | sed 's/^/'$(echo $RANDOM)'.rmvb_/g'  13856.rmvb_# 结果  # 下面例子取用当前日期做为结果的一部分,以下:  echo | sed 's/^/'$(date +"%Y%m%d")'.rmvb_/g'  20130401.rmvb_ # 结果  二、sed命令中使用双引号的状况下,直接`shell command`或者$(shell command)引用命令执行。  echo | sed "s/^/$(date +"%Y%m%d").rmvb_/g"  20130401.rmvb_# 结果  # 使用环境变量$RANDOM以及旧式命令替换的例子:  echo | sed "s/^/`echo $RANDOM`.rmvb_/g"  29484.rmvb_# 结果  总结一下  在sed语句里面,变量替换或者执行shell命令,双引号比单引号少绕一些弯子;因此,sed和变量的关键词搜索的结果,众多都写上替换单引号为双引号。
相关文章
相关标签/搜索