Câu trả lời:
Sử dụng >>
thay vì >
khi hướng đầu ra vào một tệp:
your_command >> file_to_append_to
Nếu file_to_append_to
không tồn tại, nó sẽ được tạo ra.
Thí dụ:
$ echo "hello" > file
$ echo "world" >> file
$ cat file
hello
world
Để append
sử dụng tập tin >>
echo "hello world" >> read.txt
cat read.txt
echo "hello siva" >> read.txt
cat read.txt
thì đầu ra phải là
hello world # from 1st echo command
hello world # from 2nd echo command
hello siva
Để overwrite
sử dụng tập tin >
echo "hello tom" > read.txt
cat read.txt
sau đó đưa ra là
hello tom
Bạn có thể sử dụng toán tử >>. Điều này sẽ nối dữ liệu từ một lệnh vào cuối tệp văn bản.
Để kiểm tra điều này hãy thử chạy:
echo "Hi this is a test" >> textfile.txt
Làm điều này một vài lần và sau đó chạy:
cat textfile.txt
Bạn sẽ thấy văn bản của mình đã được thêm vào nhiều lần vào tệp textfile.txt.
Sử dụng command >> file_to_append_to
để chắp thêm vào một tập tin.
Ví dụ echo "Hello" >> testFile.txt
THẬN TRỌNG: nếu bạn chỉ sử dụng một lần duy nhất, >
bạn sẽ ghi đè lên nội dung của tệp. Để đảm bảo điều đó không bao giờ xảy ra, bạn có thể thêm set -o noclobber
vào .bashrc
.
Điều này đảm bảo rằng nếu bạn vô tình gõ command > file_to_append_to
vào một tệp hiện có, nó sẽ cảnh báo bạn rằng tệp đó đã tồn tại. Thông báo lỗi mẫu:file exists: testFile.txt
Do đó, khi bạn sử dụng >
nó sẽ chỉ cho phép bạn tạo một tệp mới, không ghi đè lên một tệp hiện có.
Sử dụng >>
toán tử để nối văn bản vào một tệp.
Sử dụng tee với tùy chọn -a (--append) cho phép bạn chắp thêm nhiều tệp cùng một lúc và cũng sử dụng sudo (rất hữu ích khi thêm vào các tệp được bảo vệ). Bên cạnh đó, thật thú vị nếu bạn cần sử dụng các shell khác ngoài bash, vì không phải tất cả các shell đều hỗ trợ các toán tử> và >>
echo "hello world" | sudo tee -a output.txt
Đây chủ đề có câu trả lời tốt đẹp về tee
cho toàn bộ câu hỏi:
cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt
điều này sẽ nối thêm 720 dòng (30 * 24) vào o.txt và sau đó sẽ đổi tên tệp dựa trên ngày hiện tại.
Chạy phần trên với cron mỗi giờ, hoặc
while :
do
cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt
sleep 3600
done
Tôi sẽ sử dụng printf thay vì echo vì nó đáng tin cậy hơn và xử lý định dạng như dòng mới \n
đúng cách.
Ví dụ này tạo ra một đầu ra tương tự như echo trong các ví dụ trước:
printf "hello world" >> read.txt
cat read.txt
hello world
Tuy nhiên, nếu bạn thay thế printf bằng echo trong ví dụ này, echo sẽ coi \ n là một chuỗi, do đó bỏ qua ý định
printf "hello\nworld" >> read.txt
cat read.txt
hello
world
Ví dụ: tệp của bạn chứa:
1. mangesh@001:~$ cat output.txt
1
2
EOF
nếu bạn muốn nối vào cuối tập tin thì ----> nhớ khoảng trắng giữa 'văn bản' >> 'tên tệp'
2. mangesh@001:~$ echo somthing to append >> output.txt|cat output.txt
1
2
EOF
somthing to append
Và để ghi đè lên nội dung của tệp:
3. mangesh@001:~$ echo 'somthing new to write' > output.tx|cat output.tx
somthing new to write
cat
là ... hoàn toàn lập dị. (Nó trống vì bạn vừa chuyển hướng đầu ra tiêu chuẩn vào một tệp.)
echo
loại bỏ các dòng mới khỏi chuỗi. Làm thế nào để bạn nối vào một tập tin một chuỗi có chứa dòng mới?