我需要复制一个文本文件的内容并将其粘贴到另一个文本文件中。第一个文本文件有 10 行数据,我需要将它们复制到第二个文本文件中,从第 5 行开始(例如)。因此,在第二个文本文件中,这些数据应该从第 5 行写入到第 14 行。如何做到这一点?提前致谢。我是 Linux 方面的新手。
答案1
这里最简单的工具可能是sed
。要插入b.txt
到a.txt
第 5 行之后,你可以这样写:
sed '5r b.txt' a.txt
sed
a.txt
逐行读取由参数 ( ) 指定的文件。所有行都会在输出中重现,就像它们在输入中出现一样,除非它们被命令更改。
是5
执行以下命令的地址(行号)。我们使用的命令是r
,它以文件名作为参数(此处为b.txt
),将其完整读取并将其插入到当前行之后的输出中。
如上所述,此sed
命令行只会将输出打印到终端,而不会写入任何文件。您可以使用 Bash 的输出重定向将其重定向到新文件(而不是任何输入文件!):
sed '5r b.txt' a.txt > c.txt
a.txt
或者,您可以使用sed
's -i
(代表“就地”)开关直接修改外部输入文件。如果您将其写为-i.bak
,它将首先使用后缀创建原始输入文件的备份副本.bak
:
sed -i '5r b.txt' a.txt
一个例子:
$ 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
答案2
head
和tail
解决方案
假设源文件名为~/a
,要插入的文件名为~/b
。我们将合并后的文件放入~/c
:
head -n 5 ~/a > ~/c
cat ~/b >> ~/c
tail --lines=+6 ~/a >> ~/c
- 路径是目录名称
~/
的简写/home/user
- head 将文件的前五行复制
a
到新创建的文件中c
- cat 列出文件的内容
b
并将其附加到文件c
- tail
a
将从第 6 行开始的文件追加到文件末尾c
验证后重命名合并文件
验证文件c
是否正确从文件合并后a
,b
我们将c
使用以下命令重命名a
:
mv ~/c ~/a
mv
将文件移动c
到文件中a
。数据并未物理移动。文件只是被重命名,这样可以节省时间。
答案3
(重复使用@ByteCommander 的优雅示例:)
awk '1; NR==5 {system("cat b.txt")}' a.txt