Regex 使用sed在txt文件的第1行插入一个变量

Regex 使用sed在txt文件的第1行插入一个变量,regex,bash,sed,Regex,Bash,Sed,我有以下几点建议: #!/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 我如何处理这些问题 您的问题是单引号“中的变量不会

我有以下几点建议:

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

我如何处理这些问题

您的问题是单引号
中的变量不会被shell展开,而是保持不变。要引用您想要扩展的变量,请使用双引号
,或者如果不需要引号,请省略引号,例如:

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

在上面的一行中,
$IPADDR
$1
在引号之外,并且在参数被馈送到
sed

之前,将由shell展开。您的问题是单引号
中的变量不会被shell展开,而是保持不变。要引用要展开的变量,请使用双引号
或者,如果不需要引号,就不要使用引号,例如:

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

在上面的第行中,
$IPADDR
$1
不在引号内,将在参数馈送到
sed
之前由shell展开。单引号表示字符串没有作为变量插入

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

出于习惯,我还在
$(…)
中执行了该命令

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

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

出于习惯,我还在
$(…)
中执行了该命令

你知道我还有
$1
作为参数。。。怎么样?@MortezaLSC:相同的模式,保留在单引号之外,请参见我的编辑。谢谢……我会检查的。你知道我还有
$1
作为参数。。。怎么样?@MortezaLSC:相同的模式,将它们保留在单引号之外,请参阅我的编辑。谢谢……我会检查它。有更可靠的方法提取ip地址,例如,请参阅。有更可靠的方法提取ip地址,例如,请参阅。