Có một giải pháp mà đôi khi chúng ta sử dụng để ghi vào cùng một tệp như được đọc từ đó. Đây là một đoạn trích từ trang người đàn ông:
sponge reads standard input and writes it out to the specified file.
Unlike a shell redirect, sponge soaks up all its input before opening
the output file. This allows constructing pipelines that read from and
write to the same file.
It also creates the output file atomically by renaming a temp file into
place, and preserves the permissions of the output file if it already
exists. If the output file is a special file or symlink, the data will
be written to it.
Đây là một đoạn cho thấy rằng nó có thể bảo tồn các liên kết tượng trưng, mặc dù tôi thường sử dụng nó để bảo vệ các nút:
# Utility functions: print-as-echo, print-line-with-visual-space.
pe() { for _i;do printf "%s" "$_i";done; printf "\n"; }
pl() { pe;pe "-----" ;pe "$*"; }
rm -f pet pet_link
echo "cat" > pet
pl " Input data file $FILE:"
head -v pet
pl " Results, before sed:"
ln --symbolic pet pet_link
ls -ligG pet pet_link
# sed --in-place --follow-symlinks 's/cat/dog/' pet_link
pe
pe " Results, after sed:"
sed 's/cat/dog/' pet_link | sponge pet_link
head -v pet
ls -ligG pet pet_link
sản xuất:
-----
Input data file data1:
==> pet <==
cat
-----
Results, before sed:
1571283 -rw-r--r-- 1 4 Nov 26 23:03 pet
1571286 lrwxrwxrwx 1 3 Nov 26 23:03 pet_link -> pet
Results, after sed:
==> pet <==
cat
1571283 -rw-r--r-- 1 4 Nov 26 23:03 pet
1571286 lrwxrwxrwx 1 3 Nov 26 23:03 pet_link -> pet
Trên một hệ thống như:
OS, ker|rel, machine: Linux, 3.16.0-4-amd64, x86_64
Distribution : Debian 8.9 (jessie)
bash GNU bash 4.3.30
Mã bọt biển có sẵn trong một gói nhiều hơn - một số chi tiết:
sponge soak up standard input and write to a file (man)
Path : /usr/bin/sponge
Package : moreutils
Home : http://kitenet.net/~joey/code/moreutils/
Version : 0.52
Type : ELF 64-bit LSB executable, x86-64, version 1 (SYS ...)
Tại cửa hàng của chúng tôi, chúng tôi đã viết một phiên bản ghi vào một tệp tạm thời cho trường hợp các tệp rất lớn.
Gói này có sẵn trên Debian, Fedora, macOS (thông qua brew), v.v ... chúc mừng,