Câu trả lời:
Tôi nghĩ rằng bạn đang tìm kiếm -i:
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
Ví dụ:
$ cat foo.txt
hello world
$ sed -i 's/o/X/g' foo.txt
$ cat foo.txt
hellX wXrld
Nếu bạn cung cấp một hậu tố, nó sẽ tạo một tệp sao lưu:
$ ls
foo.txt
$ sed -i.bak 's/o/X/g' foo.txt
$ ls
foo.txt foo.txt.bak
Tệp đầu vào được sửa đổi và bản sao lưu chứa dữ liệu tệp gốc được tạo.
Cũng lưu ý rằng đây là cho GNU sed, có một số khác biệt nhỏ về định dạng giữa các sedtriển khai khác nhau .
sedkhông thực hiện chỉnh sửa tại chỗ. Nó tạo ra một tập tin mới và ghi đè lên tập tin cũ, inode thay đổi.
{ rm file; cmd > file; } < filesẽ dẫn đến kết luận rằng cmd đọc và ghi vào cùng một tệp, điều này không có. Đó là hai tập tin phân biệt có cùng tên. Nhưng tôi không muốn bắt đầu một cuộc thảo luận ở đây.
sed: 1: "foo.txt": invalid command code fkhi chạy sed -i 's/o/X/g' foo.txt. Tuy nhiên, cung cấp một phần mở rộng, như sed -i .bak 's/o/X/g' foo.txthoạt động tốt. Bất kỳ ý tưởng làm thế nào để làm cho nó hoạt động mà không cần tạo tập tin sao lưu?
sed -i '' 's/o/X/g' foo.txt
Các giải pháp này hoạt động cho HPUX (UNIX):
1 .
{ rm test1.sh && awk '{gsub("Error", "NO_Error", $0); print}' > test1.sh; } < test1.sh:
2.
perl -pi -e 's/Error/NO_Error/g' test1.sh
3.
sed 's/Error/NO_Error/g' test1.sh | tee test1.sh
-etùy chọn là để thực thi nhiều sedlệnh
sed -e 's/linux/unix/' -e 's/os/OS/' file.txt
coi file.txtnhư
linux os
thì O / P là
unix os
-i tùy chọn lưu thay đổi vĩnh viễn ...
-elá cờ tượng trưng cho biểu. Bạn có thể muốn-icờ có nghĩain-placevà tôi thực sự khuyên bạn nên sử dụngsed -i.bak 's/../' filename