我需要更改此多行,但我对如何处理新行感到困惑,
我的文件是这样的
%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
与就地编辑命令相比,这在较大的情况下也很有效。