echo "abc" >>file.txt
đặt một dòng mới sau abc
, không phải trước. Nếu bạn kết thúc với abc
dòng riêng của mình, điều đó có nghĩa là dòng mới trước abc
đó đã có mặt file.txt
.
Lưu ý rằng việc tệp văn bản kết thúc ở dòng mới là hoàn toàn bình thường. Trên unix, một dòng bao gồm một chuỗi các ký tự không phải là null⁰ hoặc dòng mới theo sau là một dòng mới. 1 Do đó, mọi tệp văn bản không trống đều kết thúc bằng ký tự dòng mới.
Nếu bạn muốn thêm văn bản vào dòng cuối cùng của tệp, thì bạn không thể thực hiện được >>
, bởi vì điều này luôn luôn nối với tệp, vì vậy nó luôn ghi sau dòng mới nhất. Thay vào đó, bạn cần một công cụ có khả năng sửa đổi một tập tin hiện có. Ví dụ: bạn có thể sử dụng sed :
sed '$ s/$/abc/' file.txt >file.txt.new && mv file.txt.new file.txt
Trong lệnh sed, lệnh đầu tiên $
có nghĩa là chỉ thực hiện lệnh sau trên dòng cuối cùng, lệnh s/REGEX/REPLACEMENT/
thay thế REGEX bằng REPLACEMENT và biểu thức chính quy $
khớp ở cuối dòng.
Lệnh sed của Linux có một tính năng tích hợp để tự động hóa trình tự tạo và thay thế tệp mới này, do đó bạn có thể rút ngắn điều đó thành
sed -i '$ s/$/abc/' file.txt
⁰ Đó là một byte null, mà ASCII gọi NUL và Unicode gọi U + 0000. Các chương trình xử lý văn bản có thể hoặc không thể đối phó với ký tự này.
1 Xem các định nghĩa về tệp văn bản , dòng và ký tự dòng mới trong phần "Định nghĩa" của chương Định nghĩa cơ sở của IEEE 1003.1-2008: 2016.