ファイルの内部を特定の構造に置き換えます。

ファイルの内部を特定の構造に置き換えます。

次のファイルがあります。

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

一部あなたのバージョンでは、次のように置き換えられました。/

他の修正(二重引用符、変数など)も参照してください。

関連情報