将数据从一个文件前置到另一个文件

时间:2012-06-28 17:37:46

标签: linux file shell prepend

如何将file1.txt中的数据添加到file2.txt?

5 个答案:

答案 0 :(得分:10)

以下命令将获取这两个文件并将它们合并为一个

cat file1.txt file2.txt > file3.txt; mv file3.txt file2.txt

答案 1 :(得分:6)

您可以使用sponge中的moreutils

在管道中执行此操作
cat file1.txt file2.txt | sponge file2.txt

答案 2 :(得分:5)

使用GNU sed的另一种方式:

sed -i -e '1rfile1.txt' -e '1{h;d}' -e '2{x;G}' file2.txt

那是:

  • 在第1行,附加文件file1.txt
  • 的内容
  • 在第1行,复制模式空间以保留空间,并删除模式空间
  • 在第2行,交换保留和图案空间的内容,并将保留空间附加到图案空间

它有点棘手的原因是r命令附加了内容, 并且第0行不可寻址,所以我们必须在第1行进行, 将原始行的内容移开,然后在附加文件内容后将其恢复。

答案 3 :(得分:0)

写文件的方式就像1)。附加在文件的末尾或2)。重写该文件。

如果你想将文件中的内容放在file2.txt之前,我恐怕你需要重写合并罚款。

答案 4 :(得分:0)

此脚本使用一个临时文件。确保临时文件不能被其他用户访问,并在最后清理它。

如果系统或脚本崩溃,则需要手动清理临时文件。在Bash 4.4.23和Debian 10(Buster)Gnu / Linux上进行了测试。

#!/bin/bash
#
# ---------------------------------------------------------------------------------------------------------------------- 
# usage [ from, to ]
#       [ from, to ]
# ---------------------------------------------------------------------------------------------------------------------- 
# Purpose:
# Prepend the contents of file [from], to file [to], leaving the result in file [to].
# ---------------------------------------------------------------------------------------------------------------------- 

# check 
[[ $# -ne 2 ]] && echo "[exit]: two filenames are required" >&2 && exit 1

# init
from="$1"
to="$2"
tmp_fn=$( mktemp -t TEMP_FILE_prepend.XXXXXXXX )
chmod 600 "$tmp_fn"

# prepend
cat "$from" "$to" > "$tmp_fn"
mv "$tmp_fn" "$to"

# cleanup
rm -f "$tmp_fn"

# [End]