2013-07-08 13 views
5

Đó có phải là lỗi ... hay có giải thích?Lệnh Sed - thứ tự cờ tùy chọn có ý nghĩa gì? (-ir vs -ri)

Xin lưu ý rằng tôi không tìm kiếm một workaround mà là lý do tại sao thứ tự của -ir-ri vấn đề ...


Hãy tưởng tượng các dữ liệu sau lưu trữ trong file data.txt

1, StringString, AnotherString 545 
2, StringString, AnotherString 723 
3, StringString, AnotherString 610 
4, StringString, AnotherString 118 
5, StringString, AnotherString 482 

Mong muốn chuyển đổi chuỗi

Replace "StringString" with "Strung" 

Với mã sau

sed -ir 's/String+/Strung/g' data.txt <-- won't work 

sed -ri 's/String+/Strung/g' data.txt <-- will work 

Tôi không thấy bất kỳ lý do tại sao thứ tự của cờ tùy chọn sẽ có vấn đề? Bất kỳ lời giải thích?

Sidenotes: Việc chuyển đổi -i "chỉnh sửa file tại chỗ" trong khi -r cho phép "mở rộng biểu thức chính quy" (cho phép các nhà điều hành +). Chạy sed 4.2.1 tháng 12 năm 2010 trên Ubuntu 12.10.

Trả lời

3

bạn xác định rằng "r" phải là hậu tố của tệp sao lưu.

Bạn có thể làm -i -r nếu bạn cần chúng theo thứ tự đó

5

Bạn đã kiểm tra sed --help hoặc man sed?

-i[SUFFIX], --in-place[=SUFFIX] 
       edit files in place (makes backup if extension supplied). 
       The default operation mode is to break symbolic and hard links. 
       This can be changed with --follow-symlinks and --copy. 
+0

Làm !! Ồ, tôi vừa tìm thấy tệp có tên "data.txtr" trong thư mục - được tạo dưới dạng bản sao lưu. Tôi đã mong đợi một không gian để tách hậu tố nhưng bây giờ nó có ý nghĩa. – somethis