使用 sed/awk 将一个文件中的特定文本添加到另一个文件的开头

使用 sed/awk 将一个文件中的特定文本添加到另一个文件的开头

我正在尝试使用 sed/awk 将一系列文本从文件 1 的开头复制到特定行。然后将该输出添加到我正在编写的脚本的文件 2 的开头。

以下命令执行我想要从文件 1 中的第 1 行提取到我想要结束的行的操作。

awk '1;/### BEGIN ###/{exit}' file1

但是,我不知道如何将此内容复制到已有文本的 file2 的开头。我尝试使用下面的 sed 在 file2 开头添加一个新行,效果很好。

sed -e '1i\A new line is added to top of document' > file2

如何使用 awk 的输出来更新 file2?还有更好的方法吗?

编辑:我已经试验过了,下面的这个命令是有效的。不过,我仍想知道是否有其他更好或更有效的方法可以做到这一点。

cat <(awk '1;/### BEGIN ###/{exit}' file1) file2 > file3

示例文本文件1:

Line1
Line...
### BEGIN ###
additional text not wanted...

示例文本文件2:

<insert text from file 1 above existing text>
Existing text...

答案1

$ python -c "for i in range(6): print('file1, line',i+1)" >file1

$ python -c "for i in range(6): print('file2, line',i+1)" >file2

$ head -n 3 file1  # "simulated" portion of file1 to prepend to file2
file1, line 1
file1, line 2
file1, line 3
   
$ (tac file2 && (head -n 3 file1 | tac) ) | tac >file3

$ cat file3
file1, line 1
file1, line 2
file1, line 3
file2, line 1
file2, line 2
file2, line 3
file2, line 4
file2, line 5
file2, line 6

$ mv file3 file2

要求:运行时有额外的内存空间tac,并且 file3 存在时有磁盘空间。

相关内容