다음과 같은 파일이 있습니다.
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
일부,귀하의 버전에서는 다음으로 대체되었습니다./.
다른 수정 사항(큰따옴표, 변수 등)도 참조하세요.