zoukankan      html  css  js  c++  java
  • sed 替换 引用变量值,记录一个自己学习错误的地方。

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

    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 IPADDR

    执行结果如下:

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

    现在换为  

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

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

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

    无法执行。

    总结如下,参考资料

     1、sed命令使用双引号的情况下,可以使用$var(变量)直接引用:
      echo | sed "s/$RANDOM1/ $RANDOM2  /g" 

    2、sed命令使用单引号的情况下,可以使用'"$var"'引用(单引号,然后双引号,变量):

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

    sed中执行外部命令。
      1、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_ # 结果
      2、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和变量的关键词搜索的结果,众多都写上替换单引号为双引号。
  • 相关阅读:
    Code Forces 650 C Table Compression(并查集)
    Code Forces 645B Mischievous Mess Makers
    POJ 3735 Training little cats(矩阵快速幂)
    POJ 3233 Matrix Power Series(矩阵快速幂)
    PAT 1026 Table Tennis (30)
    ZOJ 3609 Modular Inverse
    Java实现 LeetCode 746 使用最小花费爬楼梯(递推)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
  • 原文地址:https://www.cnblogs.com/fyc119/p/7521366.html
Copyright © 2011-2022 走看看