多行替换为新行

多行替换为新行

我需要更改此多行,但我对如何处理新行感到困惑,

我的文件是这样的

%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

有什么简单的方法可以用新的 4 行替换前 3 行吗?另外,“标题”之前的 \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要修改的文件(用 4 行块替换前 3 行)并且您已将 4 个新行复制到 中file2,我会这样做:

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

file1与就地编辑命令相比,这在较大的情况下也很有效。

相关内容