覆盖文件的前 n 行

覆盖文件的前 n 行

我有一个 7GB 文本文件,
我需要编辑该文件的前 n 行(假设 n=50)
我想按以下方式执行此操作:

head -n 50 myfile >> tmp
vim tmp # make necessary edits
substitute first 50 lines of myfile with the contents of tmp
rm tmp

我该如何完成这里的第三步?还赞赏对一般问题的更好解决方案注意:此环境中没有 GUI

答案1

man tail说:

   -n, --lines=[+]NUM
          output the last NUM lines, instead of the last 10;
          or use -n +NUM to output starting with line NUM

因此你可以做

tail -n +51 myfile >>tmp

答案2

进行备份

cp fileorig.txt fileold.txt

复制 tmp.txt 中的 50 行

head -n 50 fileorig.txt > tmp.txt

使用 vim 进行必要的编辑

vim tmp.txt

为了让 3d 东西做到这一点

首先用sed删除前50行

sed -i 1,50d fileorig.txt

然后在 newfile 中 cat tmpedited+fileorig.txt

cat tmp.txt fileorig.txt > filenew.txt

如果您喜欢,请参阅 filenew.txt 如果出现问题恢复备份

cp fileold.txt fileorig.txt

答案3

找到了解决方案

head -n 50 myfile > tmp
vim tmp # make necessary edits
cat tmp > result
tail -n 50 myfile >> result
# result now contains the edited myfile

相关内容