使用sed在txt文件的第#1行插入变量

时间:2014-03-04 08:22:05

标签: regex bash sed

我有以下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

我该如何处理这些问题?

2 个答案:

答案 0 :(得分:4)

您的问题是单引号'内的变量不会被shell扩展,但保持不变。要引用您想扩展的变量,请使用双引号",或者如果不需要它们,请不要使用引号,例如。

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

上面的行$IPADDR$1不在引号之内,并且会在将参数提供给sed之前由shell进行扩展。

答案 1 :(得分:3)

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

#!/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

我也出于习惯在$(...)做了命令!