如何复制文本文件的内容并将其粘贴到另一个从某一行开始?

G. *_*lis 13 text-processing

我需要复制一个文本文件的内容并将其粘贴到另一个文本文件中。第一个文本文件有 10 行数据,我需要将它们复制到从第 5 行开始的第二个文本文件(例如)。所以在第二个文本文件中,这些数据应该从第 5 行写入到第 14 行。如何做到这一点?提前致谢。将我视为 Linux 新手。

Byt*_*der 16

这里最简单的工具可能是sed. 要插入b.txta.txt第 5 行之后,您可以编写:

sed '5r b.txt' a.txt
Run Code Online (Sandbox Code Playgroud)

sed逐行读取指定为参数 ( a.txt)的文件。除非它们被命令更改,否则所有行都将在输出中复制,就像它们在输入中出现的一样。

5是在其将被执行如下命令的地址(行号)。我们使用的命令 is r,它将文件名作为参数(此处b.txt),完整读取它并将其插入到当前行之后的输出中。

如上所述,此sed命令行只会将输出打印到终端,而不会写入任何文件。您可以使用 Bash 的输出重定向将其重定向到一个新文件(不是任何输入文件!):

sed '5r b.txt' a.txt > c.txt
Run Code Online (Sandbox Code Playgroud)

或者,您可以a.txt使用sed's -i(用于“就地”)开关直接修改外部输入文件。如果你把它写成-i.bak,它会先备份原始输入文件的后缀.bak

sed -i '5r b.txt' a.txt
Run Code Online (Sandbox Code Playgroud)

一个例子:

$ cat a.txt 
January
February
March
April
May
October
November
December

$ cat b.txt 
June
July
August
September

$ sed '5r b.txt' a.txt
January
February
March
April
May
June
July
August
September
October
November
December
Run Code Online (Sandbox Code Playgroud)


Win*_*nix 10

headtail解决方案

假设调用了源文件,并且调用~/a了要插入的文件~/b。我们将合并后的文件放入~/c

head -n 5 ~/a > ~/c
cat ~/b >> ~/c
tail --lines=+6 ~/a >> ~/c
Run Code Online (Sandbox Code Playgroud)
  • 路径~/是您的/home/user目录名称的简写
  • head 将文件的前五行复制a到新创建的文件中c
  • cat 列出文件的内容b并将其附加到文件c
  • taila从第 6 行开始追加文件,直到文件末尾c

验证后重命名合并文件

在验证文件c从文件中正确合并后ab我们将重命名ca

mv ~/c ~/a
Run Code Online (Sandbox Code Playgroud)
  • mv将文件移动c到文件中a。数据不会物理移动。该文件被简单地重命名以节省时间。