のインデントを維持しながら、私は、様々なFortranのファイルには、次のループの構文を交換したいと思います2つのワードでライン上の2つの単語を置き換えsedコマンド秒1
私が "やる" ことで "do number,
" を置き換えるに成功
do k=0,size_z+1
do j=0,size_y+1
write(5,1000,advance='no') (x0(i,j,k),i=0,size_x)
write(5,999,advance='no') x0(size_x+1,j,k)
write(5,*)
end loop
if(k.ne.(size_z+1)) then
write(5,*)
endif
end loop
:
今sed "s/do\s[0-9]*,/do/g"
、私は、rしたいと思います比較的この「continue
」に対応するループの「do
」キーワードに「continue
」(のくぼみに等しい「end loop
」のインデントを設定して「end loop
」によってeplace「30 continue
」および「40 continue
」(所望交換上記参照)。
残念ながら、私は良いインデントでこの結果を得る専門家ではありません。だから私は、ソリューションを使用したい
1000 format(1000(f15.11,1x))
1001 format(' Convergence = ',f11.9,' after ',i9,' steps ')
1002 format(' Wall Clock = ',f15.6)
:
すべてのヘルプは大歓迎です、私のファイルで
UPDATE 1
について、私はこのような行を持っていることに気づきました与えられて同時に数字で始まり、 "format(
"を含む行の置換を除外する
上記の解決方法を維持しながら、このパターンの除外方法を知りません。私は試しました:
sed -e 's:\(\s*do\s*\)[0-9]*,\s*:\1:' \
-e '/^[0-9]/ s:[0-9 ]: :g' \
-e '/format(/!s:continue:end loop:'
しかし、これは動作しません。私が取得:
format( (f . , x))
format(' Convergence = ',f . ,' after ',i ,' steps ')
format(' Wall Clock = ',f .)
おかげで、次のように
- @ AFSHINありがとう、それは動作します。私は "**:**"文字の使用を知らなかった... '/^[0-9]/s:[0-9]::g'は何を説明できますか?あなたは** sed "s/pattern1/pattern2/g" **のようなスラッシュ文字を使ってみませんか?よろしくお願いいたします。 – youpilat13
- @ AFSHIN私は数字で始まる行もありますので、これらの行は変更しないでください。私の** UPDATE 1 **、ありがとうございます – youpilat13
、^[0-9]/'part to'/continue/'、私はあなたに_continue_という別の行があるとは言いませんでした:D次に'/^ [0-9]。* continue/' –