두 단계로 나누어 진 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
기본적으로, "왼쪽"라인이 발견되면 : 파일 만에 한 번 나타날 것 "왼쪽"라는 단어를 당연하게 촬영
"left"라는 단어의 다른 인스턴스가 있습니까? 아니면 해당 컨텍스트에서 한 번만 표시된다고 가정 할 수 있습니까? – Nic3500
@ Nic3500 전체 텍스트 파일에서 한 번만 발생합니다. 그것은 내 출력 텍스트 파일에서 긍정적입니다. 언급하는 것을 잊었다 !! –
감사합니다. 그런 다음 작동하는 스크립트를 게시했습니다. – Nic3500