2011-10-27 23 views
14

Tôi đang sử dụng lệnh này sed trên Linux, để vá một tập tin, và nó hoạt động tốt:Sed lệnh công trình trên Linux, nhưng không phải trên OS X

sed -i -r "s/(\tpublic function __call.*)/\1\n\t\treturn null;/" rb.php 

Nhưng khi tôi thử lệnh này trên OS X, Tôi gặp lỗi:

sed: 1: "s/(\tpublic function __ ...": \1 not defined in the RE 

Vì vậy, bất kỳ ai cũng có thể giúp tôi thực hiện lệnh trên cả Linux và OS X?

Bằng cách này, tôi đã cố gắng lệnh như:

sed -i '' -r "s/(\tpublic function __call.*)/\1\n\t\treturn null;/" rb.php 

nhưng nó không hoạt động trên Linux.

Trả lời

28

Đối với Mac OS X sed, hãy sử dụng -E thay vì -r để nhận ERE. Ngoài ra, các phần mở rộng của GNU không có ở đó, vì vậy bạn sẽ cần các ký tự chữ thay vì các ký tự đại diện \t\n.

Hoặc chỉ cần cài đặt GNU sed, tất nhiên.

0

Tôi nghĩ rằng việc thêm -E sẽ làm cho nó hoạt động cho cả hai.

+0

Cần thiết nhưng không đủ, tôi sợ. –

1

( là tiêu chuẩn cho perl, không phải cho sed. Thay vào đó, bạn nên sử dụng \(. Mac OS X không sử dụng GNU sed.

+0

'-r' là một cờ cho regex mở rộng. vì vậy chúng tôi không cần phải thoát khỏi '(' –

+0

'-r' không được ghi trong [trang người đàn ông sed của Apple] (http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/ man1/sed.1.html) – mouviciel

+0

Có thể là một công cụ GNU. –

Các vấn đề liên quan