我有两个文件,spec文件和sh文件。
spec文件中的变量包含值。我希望将该变量的值分配给sh文件中的另一个变量。
spec文件包含以下内容:
HOSTID=10
并且sh文件中有一个变量:
ACTIVE_HOSTID=
我在spec文件中使用了以下sed命令。
sed "s/$HOSTID/ACTIVE_HOSTID/g" spec_file>sh_file
有人可以帮我吗?
编辑:
我的spec文件如下:
HOSTID=`ip addr | grep ether | awk '{print $2}' | head -n 1 | sed -e 's/\://g'`
我的sh文件如下:
ACTIVE_HOSTID=
BACKUP_SERVER_HOSTID=
EXTENDED_SUFFIX=
EXTRA_SYSPROPERTIES=
现在我需要从HOSTID获取ACTIVE_HOSTID的值。
编辑2:
我尝试了以下内容:
sed -i "s/ACTIVE_HOSTID=.*/ACTIVE_HOSTID=HOSTID/" sh_file
它正在用字符串“HOSTID”替换ACTIVE_HOSTID,而不是它的值。 如果我使用“$”喜欢
sed -i "s/ACTIVE_HOSTID=.*/ACTIVE_HOSTID=$HOSTID/" sh_file
ACTIVE_HOSTID仍为空
答案 0 :(得分:0)
由于您还没有显示任何示例Input_file,所以我在这里举例。
HOSTID=10
ACTIVE_HOSTID=17
cat Input_file
S00739A WT-10
S00739B WT-2
S00739D mt-1
S00739E mt-2
然后,以下代码将在Input_file中将值从10更改为17.
sed "s/$HOSTID/$ACTIVE_HOSTID/g" Input_file
S00739A WT-17
S00739B WT-2
S00739D mt-1
S00739E mt-2
编辑:如果您要将不同脚本(您提到的sh文件)和文件中的变量导入到新的shell脚本/脚本中,那么以下内容可以帮助您将变量从那里导入到当前脚本。
. ./script_name
OR
source ./script_name
现在,当您创建一个新脚本并对spec和sh文件执行上述操作(在此sed脚本中调用它们的变量)时,名为HOSTID和ACTIVE_HOSTID的变量将具有值,然后您可以使用sed命令。
答案 1 :(得分:0)
在spec_file
转让后将其放入HOSTID
。
sed -i.bak "s/ACTIVE_HOSTID=.*/ACTIVE_HOSTID=$HOSTID/" sh_file
您的代码正在替换该行的ACTIVE_HOSTID=
部分,但您希望在之后替换部分。
答案 2 :(得分:0)
sed很难 你可以尝试
exec 3<"sh file"
rm "sh file"
while read line
do
if [[ "$line" =~ "ACTIVE_HOSTID=" ]]
then
line=$(grep 'HOSTID=' spec_file)
echo ACTIVE_"$line"
else
echo "$line"
fi
done<&3>"sh file"