複数行を新しい行に置き換える

複数行を新しい行に置き換える

この複数行を変更する必要がありますが、新しい行を処理する方法は混乱しています。

私のファイルは次のとおりです

%nproc=1
%chk=pes.chk
#CCSD/6-31G* Opt=ModRedundant MaxDisk=50GB

Title

-1 1
H xxxx xxxx xxxx

これに変えたいです。

%nproc=20 
%chk=pes.chk 
%mem=200GB
#CCSD/6-31G(d) Opt SCF(maxcyc=1000)

Title

-1 1 
H xxxx xxxx xxxx

最初の3行を新しい4行に置き換える簡単な方法はありますか?また、「タイトル」の前の \n も重要です。

答え1

GNU sedの使用:

printf '%s\n' '%nproc=20' '%chk=pes.chk' '%mem=200GB' '#CCSD/6-31G(d) Opt SCF(maxcyc=1000)' |
  sed -e '3r/dev/stdin' -e '1,3d' file

または、新しい行が次の名前のファイルにある場合linesfile

sed -e '3rlinesfile' -e '1,3d' file

答え2

file1ファイルを変更し(最初の3行を4行のブロックに置き換えて)、ファイルに4行の新しい行をコピーしたと仮定すると、file2次のようになります。

tail -n +4 file1 >> file2 && mv file2 file1

file1これは、内部編集コマンドよりも大きな状況でもうまく機能します。

関連情報