Добавление данных из одного файла в другой
Как добавить данные из file1.txt в file2.txt?
5 ответов
следующая команда возьмет два файла и объединит их в один
cat file1.txt file2.txt > file3.txt; mv file3.txt file2.txt
вы можете сделать это в производство, используя sponge
С moreutils
:
cat file1.txt file2.txt | sponge file2.txt
другой способ использования 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,
перемещение содержимого исходной строки в сторону, а затем ее возвращение после добавления содержимого файла.
Как писать файл как 1). добавить в конце файла или 2). перепишите этот файл.
Если вы хотите поместить содержимое файла file1.txt впереди file2.txt, боюсь, вам нужно переписать комбинированный штраф.
этот скрипт использует временный файл. Он гарантирует, что временный файл недоступен другим пользователям, и очищает его в конце.
Если ваша система или сбой скрипта, вам нужно будет очистить временные файлы вручную. Протестировано на 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=""
to=""
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]