2016-05-31 8 views
2

私はいくつかの変数を含むスクリプトを持っています。そのうちの1つは独自のパスMYPATHです。
MYPATHの出力を保存し、別の変数SOME_OTHER_PATHを同じ値に置き換えます。私は2つの問題があり、私が書いたスクリプトは、このsed:出力を保存して置き換えます

mylocalpath=`sed -n /^MYPATH/p' myfile.sh | sed -e 's/MYPATH/'` 
sed -i -e "s/^SOME_OTHER_PATH/${mylocalpath}" myfile.sh 

を行い

MYPATH="/opt/local/custom/myfiles" 
SOME_OTHER_PATH="/opt/local/custom/myfiles" 

をしたい

MYPATH="/opt/local/custom/myfiles" 
SOME_OTHER_PATH="" 

myfile.sh出力で

現在のエントリーここには

  1. ${mylocalpath}は、「/」これらを評価するためのsedの試行が含まれていると私は(代わりに二回SED実行する)SEDファイルにスクリプト全体をバンドルし、

    としてそれを実行したいと思い例外
  2. がスローされますので、

    sed -f sed_file myfile.sh 
    
+0

問題#1の場合([SEDのためのエスケープ文字については、この答え] http://stackoverflow.com/を参照してください。

はちょうど一時ファイルを使用し、「インプレース」編集を実行するにはa/29613573/2877364) – cxw

答えて

2

私はこれがSEDで可能であることを確信している間、私はawkを使用することをお勧めします:

awk -F'"' '/^MYPATH=/ { path = $2 } /^SOME_OTHER_PATH=/ { $0 = $1 path "\"" } 1' file 

行がMYPATHで始まる場合は変数にパスを保存し、行がSOME_OTHER_PATHで始まる場合はそのパスを使用します。最後の1は最短で,の条件であり、{ print }がデフォルトの動作であるため、すべての行が印刷されます。 、

awk ... file > tmp && mv tmp file 
関連する問題