12

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

4

5 回答 5

21

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

cat file1.txt file2.txt > file3.txt; mv file3.txt file2.txt
于 2012-06-28T17:42:38.540 回答
7

sponge您可以使用from在管道中执行此操作moreutils

cat file1.txt file2.txt | sponge file2.txt
于 2015-10-11T05:00:10.623 回答
6

使用 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 行进行,将原行的内容移开,然后在该文件已附加。

于 2015-10-11T05:30:49.330 回答
1

如果它在您的系统上可用,那么moreutils 的海绵就是为此而设计的。这是一个例子:

cat file1.txt file2.txt | sponge file2.txt

如果您没有sponge,则以下脚本使用临时文件执行相同的工作。它确保其他用户无法访问临时文件,并在最后清理它。

如果您的系统或脚本崩溃,您可能需要手动清理临时文件。在 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]
于 2018-08-15T13:11:00.803 回答
0

写入文件的方式就像1)。附加在文件末尾或 2). 重写那个文件。

如果你想把file1.txt中的内容放在file2.txt之前,恐怕你需要重写合并后的罚款。

于 2012-06-28T17:43:36.417 回答