2013-04-24 6 views
11

Tôi hiện đang sử dụng 's/string/new_string/g' phải đi qua một số tập tin CSV, tuy nhiên tôi chạy vào khó khăn trong các tình huống sau: trường hợpSed kết hợp chính xác

Tôi muốn thay thế các trường hợp '192.168.0.11', tuy nhiên nó cũng bắt của '192.168.0.111' .

Làm thế nào tôi có thể đảm bảo sed chỉ lấy '192.168.0.11' chứ không phải '192.168.0.111'? Tôi rõ ràng sẽ phải lặp lại điều này cho nhiều biến, vì vậy một cái gì đó dễ dàng mở rộng sẽ được đánh giá cao.

Cảm ơn!

+2

bạn có thể hiển thị lệnh sed hiện tại của mình và dữ liệu mẫu không, vui lòng – suspectus

Trả lời

19

Tôi không chắc chắn những gì các regex bạn đang sử dụng, nhưng nếu bạn muốn có một trận đấu chính xác của '192.168.0.11' bạn có thể sử dụng: s/\<192\.168\.0\.11\>//g

Lực \<\> một kết hợp chính xác.

+0

Hoàn hảo, cảm ơn bạn – Numpty

+3

Lưu ý rằng '.' khớp với bất kỳ ký tự nào, vì vậy' 192.168.0.11' sẽ khớp với '192.168.05.1'. Bạn cũng nên trích dẫn các dấu chấm bằng dấu gạch chéo ngược ('$ sed 's/\ <192 \ .168 \ .0 \ .11 \> // g''). – bobbogo

+0

bắt tuyệt vời @bobbogo, tôi đang cập nhật câu trả lời của mình để phản ánh. – dave