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


13

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

Answers:


10

headtail解决方案

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

head -n 5 ~/a > ~/c
cat ~/b >> ~/c
tail --lines=+6 ~/a >> ~/c
  • 该路径~/是您的/home/user目录名称的简写形式
  • 头将文件的前五行复制a到新创建的文件中c
  • cat列出文件的内容b并将其附加到文件c
  • 尾部a从第6行开始附加文件,直到文件结尾c

验证后重命名合并的文件

确认文件c已从文件中正确合并后ab我们将重命名ca使用:

mv ~/c ~/a
  • mv将文件移动c到文件中a。数据不会物理移动。只需将文件重命名即可节省时间。

谢谢您的回答。工作正常。但是,是否有另一种方法可以不使用第三个文本文件呢?
G. Paschalis

完成后,可以将第三个文件重命名为源文件。我认为最好首先查看该文件。我现在将其他步骤添加到答案中。
WinEunuuchs2Unix

或...(head -n 5 a.txt ; cat b.txt ; tail -n +6 a.txt) > c.txt

1
@JJoao这是一个不错的一行摘要:)出于教学目的,我更喜欢每个命令方法使用一行,并嵌套if语句。但是,对于复制和粘贴到终端机中,我很喜欢这种衬板!
WinEunuuchs2Unix

16

这里最简单的工具可能是sed。要插入b.txta.txt5日线后,你可以写:

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

0

(重用@ByteCommander中的优美示例:)

awk '1; NR==5 {system("cat b.txt")}' a.txt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.