2016-11-11 5 views
-1

こんにちは私はいくつかのファイルを編集する必要がありますが、私は手動でやりたいとは思っていませんが、sedコマンドを使って知っています。コマンドラインを使ってファイルを編集できます。パターンをどのように編集するのかわからない。例えば私は、このファイルを持っている:bashファイル内の複数行のテキストをパターンに置き換えてください。

(
    AMI1 
    { 
     type   patch; // <- relpace patch by cyclicAMI; 
     nFaces   1350; 
     startFace  2433406; 
    } 
    inlet 
    { 
     type   patch; 
     nFaces   1125; 
     startFace  2434756; 
    } 
    outlet 
    { 
     type   patch;  
     nFaces   1125; 
     startFace  2435881; 
    } 
    AMI2 
    { 
     type   patch; // <- relpace patch by cyclicAMI; 
     nFaces   2850; 
     startFace  2440606; 
    } 
) 

をそして、私はこのように見えるようにONLY AMIキーを編集したい:

(
    AMI1 
    { 
     type   cyclicAMI;  // <-- Replaced 
     inGroups  1(cyclicAMI); // <-- Add 
     nFaces   1350; 
     startFace  2433406; 
     matchTolerance 0.0001;   // <-- Add 
     transform  noOrdering;  // <-- Add 
     neighbourPatch AMI2;   // <-- Add AMI2 in AMI1 
    } 
    inlet 
    { 
     type   patch; 
     nFaces   1125; 
     startFace  2434756; 
    } 
    outlet 
    { 
     type   patch; 
     nFaces   1125; 
     startFace  2435881; 
    } 
    AMI2 
    { 
     type   cyclicAMI;  // <-- Replaced 
     inGroups  1(cyclicAMI); // <-- Add 
     nFaces   2850; 
     startFace  2440606; 
     matchTolerance 0.0001;   // <-- Add 
     transform  noOrdering;  // <-- Add 
     neighbourPatch AMI1;   // <-- Add AMI1 in AMI2 
    } 
) 

答えて

1

過度にエレガントな、しかし、動作していません。

state=0 
while IFS= read -r line; do 
    case "${line// }" in 
     AMI[12]) state=${line##*AMI} 
       echo "$line";; 
     typepatch\;*) echo "  type   cyclicAMI;" 
         echo "  inGroups  1(cyclicAMI);";; 
        else 
         echo "$line" 
        fi;; 
     \}) if [ "$state" != 0 ]; then 
       echo "  matchTolerance 0.0001;" 
       echo "  transform  noOrdering;" 
       echo "  neighbourPatch AMI$((3-state));" 
       echo " }" 
       state=0 
      else 
       echo " }" 
      fi;; 
     *) echo "$line" 
    esac 
done < textfile.txt 
+0

お返事に感謝、しかし、 'inlet'と' outlet'キーと最後の括弧の閉じ括弧の結果が、おっと@efirvida – efirvida

+0

が欠落しています!一定。 – hidefromkgb

+0

ありがとう、最後の空の行を削除することによって、最後の括弧が間違っていました。おかげで、今はすべてOKです – efirvida

関連する問題