Giải pháp:
sed -i '' 's/ :(float)//g' *
sed -i '' 's/[chuck]: cleaning up...//g' *
Giải thích:
tôi có thể nhận được:
sed -ie 's/ :(float)//g' *
để hoạt động, nhưng điều đó tạo ra các tệp giữ các tệp cũ.
Đó là bởi vì sed
's i
cờ là nghĩa vụ phải làm việc theo cách
-i extension
Edit files in-place, saving backups with the specified extension. If a zero-length extension is given, no backup will be saved.
rằng Trong trường hợp này e
đang được hiểu là biện pháp mở rộng bạn muốn lưu bản sao lưu của bạn với. Vì vậy, tất cả các tệp gốc của bạn sẽ được sao lưu với một số e
được thêm vào tên của chúng.
Để cung cấp tiện ích mở rộng bằng không, bạn cần sử dụng -i ''
.
Lưu ý: Không giống như -i<your extension>
, -i''
sẽ không hoạt động. Bạn cần có một ký tự khoảng trắng giữa -i
và ''
để nó hoạt động.
Xóa cờ -e dẫn đến lỗi mẫu thay thế chưa được hoàn thành.
Khi bạn loại bỏ các -i
e
ngay sau, ví dụ:
sed -i 's/ :(float)//g' *
s/ :(float)//g
bây giờ sẽ được giải thích như là mở rộng lập luận để i
cờ.Và file đầu tiên trong danh sách các tập tin được tạo ra bởi sự bành trướng vỏ *
được hiểu như là một sed function
(có lẽ hầu hết s/regular expression/replacement/flags
chức năng) Bạn có thể xác minh điều này bằng cách kiểm tra đầu ra của
sedfn=$(echo * | cut -d' ' -f1); [[ ${sedfn:0:1} == "s" ]]; echo $?
Nếu đầu ra của trên chuỗi lệnh là 0
, giả định của chúng tôi được xác thực. Cũng trong trường hợp này, nếu bằng cách nào đó tên tập tin đầu tiên đủ điều kiện như một hàm sed hợp lệ s/regular expression/replacement/flags
, các tên tệp khác sẽ được hiểu là các tệp thông thường cho sed hoạt động.
"Tạo tệp giữ các tệp cũ" có nghĩa là gì? –
Nếu tôi có một tệp có tên là abc. Nó loại bỏ các dòng từ tập tin abc, nhưng tạo ra một tập tin gọi là abce. –
'g' không cần thiết nếu mẫu chỉ xuất hiện một lần trên mỗi dòng. –