Chỉnh sửa. Khi tôi viết câu trả lời này, tôi đã bỏ qua phần "terabyte" của câu hỏi. Do đó, không sử dụng phương pháp được trình bày ở đây. Tôi vẫn để lại bài đăng này, vì nó quảng cáo việc sử dụng công cụ tuyệt vời này, ed
, trình soạn thảo văn bản chuẩn.
Như thường lệ, ed
là trình soạn thảo văn bản chuẩn. Các giải pháp sử dụng sed -i
không, như nó đề cập đến, "chỉnh sửa các tập tin tại chỗ". Thay vào đó, nó sẽ xuất nội dung của nó thành một tệp tạm thời và sau đó đổi tên tệp này thành tệp gốc. Điều đó thực sự không tốt cho các tệp lớn!
Sử dụng ed
thay vì thực sự chỉnh sửa tệp.Một cái gì đó dọc theo dòng sau đây:
#!/bin/bash
file="input.csv"
{
ed -s "$file" <<EOF
1
i
id1,id2,id3,id4
.
wq
EOF
} > /dev/null
Giải thích: 1
đi vào dòng đầu tiên, i
chuyển sang chế độ chèn, sau đó chúng tôi chèn id1,id2,id3,id4
sau đó .
để quay trở lại chế độ bình thường, và wq
để viết và bỏ thuốc lá.
Với phương pháp này, bạn thực sự chỉnh sửa tệp và nhanh gấp hai lần so với phương pháp sed. Ngoài ra, ed
được biết đến là "tệp an toàn lớn"!
Xong.
Nguồn
2012-11-15 18:45:48
Tôi chắc chắn sẽ không làm điều đó với một tập tin lớn như vậy. sed đang tạo ra một tập tin tmp trên bay - nếu nó không tìm thấy không gian cho nó tôi sẽ không ngạc nhiên nếu bạn bị mất các nội dung của tập tin ban đầu của bạn. Chỉ cần sử dụng tập tin 'cmd> tmp && mv tmp' và bạn biết bạn an toàn. –
@Ed: bạn nói đúng, điều này không đặc biệt an toàn đối với các tệp rất lớn như tệp đang được đề cập đến. Tôi đã chỉnh sửa câu trả lời của mình để cung cấp giải pháp thay thế an toàn hơn, vẫn sử dụng sed. –