2013-10-31 14 views
5

Tôi muốn xóa các dòng khỏi tệp phù hợp với một số chuỗi nhất định. Các chuỗi này chứa dấu gạch chéo, tức là '/'. Vấn đề của tôi là mặc dù bạn có thể thay đổi dấu phân cách bằng sed để thay thế, bạn dường như không thể làm như vậy với tùy chọn xóa.thay đổi tùy chọn xóa xóa dấu phân tách

I.e. điều này không hoạt động do dấu gạch chéo trong $ x:

sed --in-place "/$x/d" total-list.csv 

trong đó $ x là ví dụ "http://someurl.com/uri". Nhưng bạn dường như không thể thay đổi dấu phân tách khi sử dụng tùy chọn d (tôi cần nó là ~ ví dụ, thay vì /).

Có ai có thể trợ giúp về điều này không?

Cảm ơn Paul

+0

Lưu ý rằng '-i' là viết tắt của' --in-place' – jkshah

+0

Cảm ơn! Sẽ tiết kiệm thời gian cho chắc chắn ... – pokero

+0

Có thể trùng lặp của [Sử dụng dấu gạch chéo trong sed thay thế] (http://stackoverflow.com/questions/5864146/use-slashes-in-sed-replace) – tripleee

Trả lời

9

Bạn có thể nói:

sed --in-place "\~$x~d" total-list.csv 

Trích dẫn từ manual:

\% regexp%

(The % có thể được thay thế bằng bất kỳ khác ký tự đơn.)

Điều này cũng phù hợp với cụm từ thông dụng regexp, nhưng cho phép một để sử dụng dấu phân cách khác với /. Điều này đặc biệt hữu ích nếu chính bản thân cụm từ chứa rất nhiều dấu gạch chéo, vì nó tránh được sự thoát ra của mỗi / tẻ nhạt. Nếu regexp chính nó bao gồm bất kỳ dấu phân cách nào ký tự, mỗi ký tự phải được thoát bằng dấu gạch chéo ngược (\).

+0

Cảm ơn rất nhiều, dường như làm việc hoàn hảo. Tất cả mọi thứ trong tập tin của tôi đang bị xóa, nhưng tôi nghĩ đó là vì không gian nằm trong tệp $ x - sẽ chạy lại và kiểm tra. Tôi không thể đánh dấu câu trả lời này là câu trả lời, sẽ làm một khi có thể. – pokero

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