Trừ khi bạn có GNU awk 4.1.0 hoặc mới hơn ...
Bạn sẽ không phải như một tùy chọn như sed của -i
tùy chọn nên thay vì làm:
$ awk '{print $0}' file > tmp && mv tmp file
Lưu ý: -i
không phải là ma thuật, nó cũng tạo ra một tập tin tạm thời sed
chỉ xử lý nó cho bạn.
Tính đến GNU awk 4.1.0 ...
GNU awk
thêm chức năng này trong phiên bản 4.1.0 (phát hành 2013/10/05). Nó không thẳng tiến như chỉ đưa ra tùy chọn -i
như được mô tả trong ghi chú đã phát hành:
Tùy chọn -i mới (từ xgawk) được sử dụng để tải tệp thư viện awk. Điều này khác với -f trong đó đối số phi tùy chọn đầu tiên được coi là một tập lệnh.
Bạn cần phải sử dụng kèm inplace.awk
bao gồm tập tin để gọi phần mở rộng đúng như vậy:
$ cat file
123 abc
456 def
789 hij
$ gawk -i inplace '{print $1}' file
$ cat file
123
456
789
Biến INPLACE_SUFFIX
có thể được dùng để xác định phần mở rộng cho một tập tin sao lưu:
$ gawk -i inplace -v INPLACE_SUFFIX=.bak '{print $1}' file
$ cat file
123
456
789
$ cat file.bak
123 abc
456 def
789 hij
Tôi hài lòng tính năng này đã được thêm vào nhưng với tôi việc triển khai không phải là rất awkish như sức mạnh là với sự conciseness của ngôn ngữ và -i inplace
là 8 c bừa bãi dài I.M.O.
Đây là liên kết đến manual cho từ chính thức.
Nguồn
2013-05-13 19:32:00
Cũng xem http://serverfault.com/a/547331/313521 để có câu trả lời chung chung hơn để "chỉnh sửa tệp tại chỗ với chuyển hướng". – Wildcard