2017-07-19 16 views
0

sedの上では動作しませんvar_:

1stRecord value 
2ndRecord value 
3rdRecord value 

私はいくつかのレコードの値を交換する必要があります。

ここ

は、いくつかのfile.confです。ここに私のスクリプトです:私はそれが

correct_1stRecord='new1stValue' 
    correct_2ndRecord='new2ndValue' 
    correct_3rdRecord='new3rdValue' 
    function correct_record() { 
    sed -i 's/^$1 $(cat file.conf | grep -e "^$1" | awk '{print $2}')/$1 $correct_$1/" file.conf 
    } 
correct_record 3rdRecord 

実行$ correct_ $ 1 $ correct_3rdRecordに切り替えて、結果として、私はこのレコードがありませんでした。私はそれがあることを期待すると

3rdRecord 3rdRecord 

を:

を私はそれはcorrect_3rdRecordが存在しないコマンドを示したBYT/$ 1 $(correct_ $ 1)にsedの式の2番目の部分を変更しようとしていた
3rdRecord new3rdValue 

は、しかし、(1)それは、コマンドが、変数ではありません、 (2)I d idはそれを上に宣言します。

+2

変数は一重引用符で囲まれていませんが、実際に何をしようとしていますか? 'cat'、' sed'、 'grep'、' awk'を同時に使う理由はほとんどありません。私は質問を作成するときに引用がちょっと混乱していると思います。展開する変数の名前に '$ correct_ $ 1'を使用しようとしている場合は、https://stackoverflow.com/questions/1694196/lookup-shell-variables-by-name-間接的に –

答えて

0

ありがとうございます。今はかなりうまく機能

userlogin niza 
useraddress theCenter 

: 記録befoure:

userlogin johny 
useraddress out 

記録をした後、私が得た結果

function go() { 
    correct_userlogin='niza' 
    correct_useraddress='theCenter' 
    old_value=$(cat dwa | grep -e "^$1"| awk '{print $2}') 
    eval $(echo correct_var='$'"correct_$1") 
    echo $correct_var 
    sed -i "s/^$1 $old_value/$1 $correct_var/" dwa 
} 
go userlogin 
go useraddress 

: 私はこれをこのようにしました。 ありがとうたくさん

関連する問題