sed命令 - 从spec文件中获取值并将其分配给sh文件中的变量

时间:2017-09-08 18:52:46

标签: regex linux bash shell sed

我有两个文件,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仍为空

3 个答案:

答案 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"