2014-03-04 32 views
0

我有以下的bash:使用插入在txt文件的行#1變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 

但是,當我cat /etc/hosts

$IPADDR 

我如何處理此類問題?

+1

還有更可靠的方法來提取IP地址,例如請參閱[將IP地址放入bash變量。有沒有更好的方法](http://stackoverflow.com/q/6829605/1331399)。 – Thor

+0

謝謝......正確:) – MLSC

回答

3

你的問題是單引號內的變量'沒有被shell擴展,但保持不變。要引用要擴展的變量,請使用雙引號",或者如果不需要這些引號,則可以省略引號。

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

在上述線$IPADDR$1是報價的外部,並且將殼中的參數正在被進料至sed之前進行擴展。

+0

你知道我還有'$ 1'作爲參數......怎麼樣? – MLSC

+1

@MortezaLSC:同樣的模式,讓它們在單引號之外,看看我的編輯。 –

+0

謝謝...我會檢查它 – MLSC

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 

我也在$(...)出的習慣做了命令!

+0

謝謝...一個好方法...我們不會感到困惑.. – MLSC