2017-11-24 16 views
0

2段階に分かれたCFDシミュレーションを実行したい。最初のステップが終了したら、テキストファイル(境界条件 - CFD用語に関連する)を変更し、さらにステップ2のケースを再実行する必要があります。複数行のテキストファイルをbashスクリプトで編集する

これまで手動で行っていましたが、シミュレーションを夜間および週末に実行する時間を短縮します。

したがって、bashスクリプトを使用してテキストファイルを編集することはできますか?

例:私のファイル構造 :

TestRun

  • Folder1に

    - 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を使って1つの特定の行番号を編集しているいくつかの投稿に出会った。

私の場合は、「左」の単語(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テキストファイル全体で1回だけ発生します。それは私の出力テキストファイルで肯定的です。言及を忘れてしまった! –

+0

ありがとう、私はその後動作するスクリプトを投稿しました。 – Nic3500

答えて

1

は、あなたがしたい編集を実行するには、このスクリプトを使用することができます新しいテキストを出力し、入力ファイル行を}までループし、左のセクションを閉じる。私はあなたの入力と出力のサンプルで試して、それは正常に動作します。

注:最終行の "data"は、変更するファイル名です。

+0

共有したbashスクリプトがテキストを画面に出力するので、どのようにファイルを上書きすることができますか(元のコピーを保持します)。 –

+0

ああはい。スクリプト "edit.bash"を呼び出すとします。 'edit.bash> output_file.txt'のように実行します。 – Nic3500

関連する問題