次のファイルがあります。
login1.stampede(73)$ cat mc_input
800 ! n_pass
300 ! n_equil_pass
6 6 6 ! simulation cell dimension in x, y, and z
700 ! Tinit
100 ! Tmin
700 ! Tmax
-10 ! Tinc
Li -6 Fe 0 ! mu init
Li -6 Fe 0 ! mu min
Li 6 Fe 0 ! mu max
Li 0.3 Fe 0 ! mu inc
4 ! number of increments between structure output (0 indicates no output)
1 ! calculate average correlations yes(1) or no (0)
0 ! temp_chem = 0 if temperature runs 1 if chem runs
これでこの行をターゲットにしたいと思います。
Li -6 Fe 0 ! mu init
-6を別のmu_init = -3に置き換えます。 sedでどのように達成できますか?ありがとうございます。したがって、結果は次のようになります。
Li -3 Fe 0 ! mu init
「Fe 0」はさまざまな他の要素番号の組み合わせにすることができますが、「H 2」、「Ge 3.2」のように固定されたままにします。
私が現在持っているものは次のとおりです。
sed -i 's,^\(Li \).*! mu init,\1$mu_init' Fe 0 ! mu init',' mc_input
しかし、うまくいきません...
答え1
ご意見から新しいベータ版-3.333:
sed -i "s/^\(Li \)[0-9-][.0-9-]*\(.*mu init\)/\1${mu_init}\2/" mc_input
- - - -
参考までに、最初のテストバージョン:
sed -i "s/^\(Li \)[0-9-][0-9-]*\(.*mu init\)/\1${mu_init}\2/" mc_input
一部、あなたのバージョンでは、次のように置き換えられました。/。
他の修正(二重引用符、変数など)も参照してください。