Cách nối đầu ra vào cuối tệp văn bản


478

Làm cách nào để nối đầu ra của lệnh vào cuối tệp văn bản?

Câu trả lời:


665

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_tokhông tồn tại, nó sẽ được tạo ra.

Thí dụ:

$ echo "hello" > file
$ echo "world" >> file
$ cat file 
hello
world

4
Vấn đề là echoloạ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?
Timothy Swan

5
@TimothySwan, tôi tin với tùy chọn -e.
Valentin Grégoire ngày

echo không loại bỏ dòng mới khỏi chuỗi. Nếu bạn không trích dẫn đúng đối số, thì shell sẽ phân tách chuỗi và chuyển đối số thành echo và echo thậm chí không bao giờ nhìn thấy các dòng mới.
William Pursell

106

Để appendsử 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

Để overwritesử dụng tập tin >

echo "hello tom" > read.txt
cat read.txt  

sau đó đưa ra là

hello tom


74

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.


40

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 noclobbervào .bashrc.

Điều này đảm bảo rằng nếu bạn vô tình gõ command > file_to_append_tovà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ó.



21

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


2
Đây là cách tốt nhất để nối một cái gì đó với một dòng mới.
M_R_K

2
đang tìm cách nối thêm các tập tin được bảo vệ và điều này giải quyết nó
Woootiness

14

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

11

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

7

Tôi đề nghị bạn làm hai việc:

  1. Sử dụng >>trong tập lệnh shell của bạn để chắp thêm nội dung vào tập tin cụ thể. Tên tệp có thể được sửa hoặc sử dụng một số mẫu.
  2. Thiết lập một cronjob hàng giờ để kích hoạt tập lệnh shell

7

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

1
Điều này là sai lệch trong nhiều chi tiết. Không gian không quan trọng và đường ống đầu ra trống catlà ... 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.)
tripleee
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.