この複数行を変更する必要がありますが、新しい行を処理する方法は混乱しています。
私のファイルは次のとおりです
%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
これは、内部編集コマンドよりも大きな状況でもうまく機能します。