【问题标题】:Insert a variable at line #1 of txt file using sed使用 sed 在 txt 文件的第 1 行插入一个变量
【发布时间】:2014-04-05 15:56:45
【问题描述】:

我有以下 bash:

#!/bin/bash
if ["$#" -ne "1"]; then
   echo "Usage: `basename $0` <HOSTNAME>"
   exit 1
fi

IPADDR=`ifconfig | head -2 | tail -1 | cut -d: -f2 | rev | cut -c8-23 | rev`
sed -i -e '1i$IPADDR   $1\' /etc/hosts

但是当我cat /etc/hosts:

$IPADDR

我该如何处理这些问题?

【问题讨论】:

标签: regex bash sed


【解决方案1】:

参考sed手册:https://www.gnu.org/software/sed/manual/sed.html

作为 GNU 扩展,i 命令和文本可以分为两部分 -e 参数,使脚本更容易:

正式用法应该是:

sed -i -e "1i$IPADDR\\" -e "$1" /etc/hosts

【讨论】:

    【解决方案2】:

    单引号表示字符串不作为变量插值。

    #!/bin/bash
    IPADDR=$(/sbin/ifconfig | head -2 | tail -1 | cut -d: -f2 | rev | cut -c8-23 | rev)
    sed -i -e "1i${IPADDR}   ${1}" /etc/hosts
    

    出于习惯,我也做了$(...)中的命令!

    【讨论】:

      【解决方案3】:

      您的问题是单引号 ' 内的变量不会被 shell 扩展,而是保持不变。要引用您想要扩展的变量,请使用双引号 " 或者如果不需要引号,就像这里一样,例如

      sed -i -e '1i'$IPADDR'   '$1'\' /etc/hosts
      

      在上面的行中,$IPADDR$1 在引号之外,在将参数提供给 sed 之前将由 shell 扩展。

      【讨论】:

      • 你知道我也有 $1 作为论据...怎么样?
      • @MortezaLSC:相同的模式,将它们放在单引号之外,请参阅我的编辑。
      猜你喜欢
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 2016-06-18
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多