Một ví dụ tuyệt vời là sed
sử dụng một tệp tạm thời để thực sự lưu nội dung và sau đó thay thế tệp gốc. Ví dụ, bạn có thể thực hiện một thử nghiệm đơn giản để tìm thấy điều này.
cat test
This is a test file.
Bây giờ, chạy ls -li
để kiểm tra số inode.
ls -li test
2368770 -rw-r--r-- 1 root root 22 Sep 12 08:46 test
Bây giờ, ban hành sed
lệnh dưới đây để thêm một dòng trống.
sed -i 's/2/B/' test
Sau khi thay đổi tệp, phát hành ls
lệnh một lần nữa và kiểm tra số inode.
ls -li test
2368753 -rw-r--r-- 1 root root 22 Sep 12 08:48 test
Chúng ta có thể thấy rằng số inode đã thay đổi nguyên vẹn. Vì vậy, thay vì sao chép vào cùng một tệp sed
sẽ tạo một tệp tạm thời mới và sao chép nội dung vào tệp tạm thời mới và sau đó xóa tệp gốc và đổi tên tệp tmp đồng bộ với tệp gốc, đó là một lý do tại sao các thao tác tệp thực sự nhanh hơn .
Trích dẫn từ trang wikipedia ,
sed là một tiện ích xử lý văn bản hướng dòng: nó đọc văn bản, từng dòng, từ một luồng đầu vào hoặc tệp, vào một bộ đệm bên trong được gọi là không gian mẫu. Mỗi dòng đọc bắt đầu một chu kỳ. Đối với không gian mẫu, sed áp dụng một hoặc nhiều thao tác đã được chỉ định thông qua tập lệnh sed. sed thực hiện một ngôn ngữ lập trình với khoảng 25 lệnh chỉ định các thao tác trên văn bản. Đối với mỗi dòng, sau khi chạy tập lệnh sed, thường xuất ra không gian mẫu (dòng đầu vào như được sửa đổi bởi tập lệnh) và bắt đầu lại chu kỳ với dòng tiếp theo.
Để hiểu thêm về không gian mẫu và giữ các khái niệm không gian của sed
, bạn nên đọc câu trả lời ở đây .
Khi sed đọc một dòng tệp theo dòng, dòng hiện đang đọc được chèn vào bộ đệm mẫu (không gian mẫu). Bộ đệm mẫu giống như bộ đệm tạm thời, Scratchpad nơi lưu trữ thông tin hiện tại. Khi bạn bảo sed in, nó sẽ in bộ đệm mẫu.
Giữ bộ đệm / giữ không gian giống như một bộ lưu trữ dài hạn, để bạn có thể bắt một cái gì đó, lưu trữ và sử dụng lại sau này khi sed đang xử lý một dòng khác. Bạn không trực tiếp xử lý không gian giữ, thay vào đó, bạn cần sao chép nó hoặc nối vào không gian mẫu nếu bạn muốn làm gì đó với nó.