2017-11-24 7 views
0

두 단계로 나누어 진 CFD 시뮬레이션을 실행하고 싶습니다. 첫 번째 단계가 끝나면 텍스트 파일 (경계 조건 - CFD 용어와 관련 있음)을 변경하고 2 단계 인 사례를 다시 실행해야합니다.bash 스크립트를 사용하여 여러 줄의 텍스트 파일 편집

지금까지 수동으로이 작업을 수행했으며 많이 손실되었습니다. 하룻밤 동안 그리고 주말 동안 시뮬레이션을 실행하는 시간.

그래서 bash 스크립트를 사용하여 텍스트 파일을 편집 할 수 있습니까?

예 : 내 파일 구조 :

을 TestRun

  • 폴더 1

    - TextFile1

을 TestRun (메인 폴더)는 서브 폴더 구성 (Folder1) 및 Folder1은 bash 스크립트로 편집 할 텍스트 파일 (TextFile1)을 가지고 있습니다 . (예를 들어) TextFile1의

내용 :로

internalField nonuniform List<scalar> 
7 
(
0 
1 
2 
3 
4 
5 
6 
); 
boundaryField 
{ 
left 
{ 
    type fixedValue; 
    value uniform 1; 
} 
} 

지금, bash는 파일이 파일을 변경한다

internalField nonuniform List<scalar> 
7 
(
0 
1 
2 
3 
4 
5 
6 
); 
boundaryField 
{ 
left 
{ 
    type groovyBC; 
    valueExpression "-pc"; 
    variables  "[email protected]=pc;"; 
    value   uniform 0; 
} 
} 

주의 사항 행의 수는 편집 할 수 있음은 더있다 1보다 크고 특정 라인 번호를 모른다. 나는 sed를 사용하여 하나의 특정 라인 번호를 편집하는 몇몇 게시물을 보러왔다.

필자의 경우, "left"(vim :/left에서와 같이) 단어를 찾아서 검색된 단어 다음에 '{}'사이의 줄을 바꾸어야합니다. ,

#!/bin/bash 
# 
insideleft='false' 
while read line 
do 
    # using grep -c to make sure it matches even if there are spaces 
    if [ $(echo $line | grep -c left) -eq 1 ] 
    then 
     insideleft='true' 
     cat <<HEREDOC 
    left 
    { 
    type groovyBC; 
    valueExpression "-pc"; 
    variables  "[email protected]=pc;"; 
    value   uniform 0; 
    } 
HEREDOC 
    else 
     if [ $insideleft == 'false' ] 
     then 
      echo $line 
     else 
      if [ $(echo $line | grep -c '}') -eq 1 ] 
      then 
       insideleft='false' 
      fi 
     fi 
    fi 
done <data 

기본적으로, "왼쪽"라인이 발견되면 : 파일 만에 한 번 나타날 것 "왼쪽"라는 단어를 당연하게 촬영

+0

"left"라는 단어의 다른 인스턴스가 있습니까? 아니면 해당 컨텍스트에서 한 번만 표시된다고 가정 할 수 있습니까? – Nic3500

+0

@ Nic3500 전체 텍스트 파일에서 한 번만 발생합니다. 그것은 내 출력 텍스트 파일에서 긍정적입니다. 언급하는 것을 잊었다 !! –

+0

감사합니다. 그런 다음 작동하는 스크립트를 게시했습니다. – Nic3500

답변

1

, 당신은 당신이 원하는 편집을 수행하려면이 스크립트를 사용할 수 있습니다 새로운 텍스트를 출력하고, 입력 파일 행을 반복하여}까지 왼쪽 섹션을 찾습니다. 입력 및 출력 샘플을 사용해 보았지만 정상적으로 작동합니다.

참고 : 마지막 줄의 "data"는 수정할 파일 이름입니다.

+0

공유 한 bash 스크립트가 텍스트를 화면에 출력하기 때문에 파일을 덮어 쓸 수 있습니까 (원래 복사본을 유지할 것입니다). –

+0

아 예. "edit.bash"라는 스크립트를 호출한다고 가정 해 보겠습니다. 'edit.bash> output_file.txt'와 같이 실행하십시오. – Nic3500