2017-09-08 12 views
0

私はspecファイルとshファイルの2つのファイルを持っています。sedコマンド - specファイルから値を取り出し、shファイルの変数に割り当てます。

specファイルの変数は値を保持します。私はその変数の値をshファイル内の別の変数に代入したいと考えています。

specファイルには以下が含まれています。

HOSTID=10 

と変数は、shのファイルにあります:

ACTIVE_HOSTID= 

私はスペックファイルに次のsedコマンドを使用していました。

sed "s/$HOSTID/ACTIVE_HOSTID/g" spec_file>sh_file 

誰でも私にこれを手伝ってもらえますか?

EDIT:

マイspecファイルは次のようになります。今、私はHOSTIDからACTIVE_HOSTIDの値を取得する必要があり

ACTIVE_HOSTID= 
    BACKUP_SERVER_HOSTID= 
    EXTENDED_SUFFIX= 
    EXTRA_SYSPROPERTIES= 

HOSTID=`ip addr | grep ether | awk '{print $2}' | head -n 1 | sed -e 's/\://g'` 

私のshファイルは次のようになります。

EDIT 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のような「$」を使用している場合ので、私はここに例を取っていINPUT_FILEあなたが任意のサンプルを示していないので、まだ

+0

$ HOSTIDは何を試すことができます それはsedを持つのは難しいですか?このsed行はスクリプトで実行されていますか?あなたは変数で何もしていませんが、あなたはその言葉を使い続けます。あなたの 'shファイル 'はどのように見えますか、実行したいことが何であれ実行したら、それをどのように見たいのですか? – JNevill

+0

このsedは仕様ファイルにあります。 HOSTIDとACTIVE_HOSTIDは変数です。 –

+1

これは意味をなさない。 'sed'コマンドがspecファイルにある場合、なぜ入力ファイルとしてspecファイルも読み込んでいますか? – Barmar

答えて

0

HOSTIDの割り当て後にspec_fileにこれを入れます。

sed -i.bak "s/ACTIVE_HOSTID=.*/ACTIVE_HOSTID=$HOSTID/" sh_file 

あなたのコードでは、行のACTIVE_HOSTID=一部を置き換えましたが、あなたはその後一部を交換したいです。

+0

だからsedコマンドはspec_fileの中にあるはずですか? –

+0

いいえ、私はこれが 'spec_file'を使う新しいスクリプトにあると仮定しました。 – Barmar

+0

spec_file自体から実行することはできますか? –

0

空です。

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 

EDIT:あなたは、次、新しいシェルスクリプト/スクリプトに異なるスクリプト(あなたがSHファイルを述べた)とファイルから変数をインポートするために探している場合あなたは現在のスクリプトにそこから変数を取るために役立つかもしれません。あなたは(このsedスクリプトでその変数を呼び出す)新しいスクリプトを作成して、スペックとshのファイルの両方について先にやるとき

. ./script_name 
OR 
source ./script_name 

さてHOSTIDとACTIVE_HOSTIDという名前あなたの変数は、それらの値を持つことになりますと、あなたはsedコマンドを使用することができます次に。

+0

HOSTIDとACTIVE_HOSTIDは同じファイルにありません。彼らは2つの異なるファイルにあります。私はspecファイルでsedコマンドを実行したいので、shファイルのACTIVE_HOSTID値を変更する必要があります。 –

+0

まだ明確ではありませんが、1つのファイルであっても、異なるファイルから値を保存することができ、これらの変数を使用することができます。変数が値を格納するために作られたため、さらなるコードなどで使用できる私たちが同じことをあなたにお手伝いできるように、私たちにもっと明確にお知らせください。 – RavinderSingh13

+0

質問を編集して、両方のファイルから内容を追加しました。あなたはそれを見ていただけますか? –

0

あなたは

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" 
関連する問題