Sử dụng sed để loại bỏ các ký tự <>,


18

Tôi có một tập tin với các dòng như sau:

...
... <230948203[234]>, ...
... <234[24]>, ...
..

Tôi muốn sử dụng sed để loại bỏ các ký tự < ,>từ mỗi dòng

Tôi đã thử sử dụng sed 's/<>,//g'nhưng nó không hoạt động (nó không thay đổi gì cả). Tôi có cần phải thoát khỏi những nhân vật đặc biệt này không. Có thể xóa nhiều ký tự bằng một sedlệnh không?


2
bash-3.2$ echo "<230948203[234]>," | tr '<>,' ' '-> 230948203 [234] -EDITED Thanks to Paul

3
@srikanthradix: Điều đó không loại bỏ các ký tự đó, thay thế chúng bằng dấu cách. Bạn muốn tr -d '<>,' ''(như trong câu trả lời của Chris Down).
Keith Thompson

1
@KeithThndry : tr -d '<>,', cuối cùng không có '', phải không?
người dùng không xác định

@userunknown: Vâng, cảm ơn vì đã sửa.
Keith Thompson

Câu trả lời:


42

Với sed:

sed 's|[<>,]||g'

Với tr:

tr -d '<>,'

2
Đúng, nhưng cá nhân tôi thấy việc sử dụng |như một dấu phân cách hơi khó hiểu. sed 's/[<>]//g'dễ đọc hơn một chút
Keith Thompson

@KeithThndry Tôi sử dụng nó cho thực tế. Tôi thấy mình phải đối phó với nghĩa đen |(và do đó phải thoát khỏi nó) ít hơn nhiều so với việc tôi phải đối phó với nghĩa đen /.
Chris Down

2
Một điểm công bằng. Mặt khác, |cũng thường là một ký tự meta, được sử dụng để xen kẽ trong một số cú pháp regrec (mặc dù sedđặc biệt cần \|cho điều đó). Cá nhân, nếu tôi cần phải xử lý các ký /tự theo nghĩa đen , tôi thường sử dụng ,như dấu phân cách.
Keith Thompson

1
Ngoài các tình huống cá nhân / cụ thể được đề cập ở trên, có một sự khác biệt cú pháp nội tại khi sử dụng một dấu phân cách không chuẩn. Không thoát / phân cách đầu tiên phải được thoát cho mỗi biểu thức phạm vi sed , ví dụ:printf 'a\nb\nc\n' | sed -n '\|a|,\|b|p'
Peter.O

8

Hãy thử cái này: sed 's/[<>,]//g'


Các thanh dọc ở đó để làm gì?
Paul Tomblin

sed 's / [<|> |] / / g' - S thực hiện tìm kiếm; / là dấu phân cách; dấu ngoặc [] cho phép chúng tôi tìm kiếm nhiều hơn một thứ; | thanh dọc là một logic hoặc g là để tìm kiếm trên toàn cầu hoặc toàn bộ tệp.
Iman

3
Bạn không cần (hoặc, thực sự, muốn) những người |bên trong []. sử dụng 's/[<>,]//g'.
Kevin

2
Bạn không cần một thanh dọc. Bất cứ điều gì trong dấu ngoặc vuông được tìm kiếm như một danh sách. sed 's/[<>,]/ /g'sẽ hoạt động chính xác là tốt, ngoại trừ ý tưởng của bạn cũng sẽ loại bỏ các thanh dọc.
Paul Tomblin

Để thêm: có thể bạn muốn xem xét các biểu thức thông thường, đây là một trong những ví dụ dễ nhất, nhưng đã thể hiện sức mạnh.
Bernhard
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.