sed one-liner để xóa mọi thứ giữa một cặp ngoặc?


15

Tôi đang làm việc với một số văn bản chứa đầy nội dung giữa các dấu ngoặc [] mà tôi không muốn. Vì tôi có thể tự xóa dấu ngoặc, tôi không cần một lớp lót để làm điều đó cho tôi, nhưng tôi cần một lớp lót sẽ loại bỏ mọi thứ giữa chúng.

Điều gì về dấu ngoặc đơn () thay vì dấu ngoặc?

Câu trả lời:


20

Thay thế [some text]bằng chuỗi trống. Giả sử bạn không muốn phân tích các dấu ngoặc đơn, some textkhông thể chứa bất kỳ dấu ngoặc nào.

sed -e 's/\[[^][]*\]//g'

Lưu ý rằng trong biểu thức khung [^][]để phù hợp với bất cứ điều gì nhưng [hay ], những ]phải đến đầu tiên. Thông thường a ]sẽ kết thúc bộ ký tự, nhưng nếu đó là ký tự đầu tiên trong bộ (ở đây, sau ^ký tự bổ sung), thì ]tự nó là viết tắt.

Nếu bạn muốn phân tích các dấu ngoặc lồng hoặc nếu văn bản được đặt trong ngoặc có thể trải dài trên nhiều dòng, thì sed không phải là công cụ phù hợp.


cảm ơn, @Gilles ... btw, nó có thể trải dài trên nhiều dòng, nhưng tôi đang sử dụng tập lệnh Perl để nối các dòng ...
ixtmixilix

@ixtmixilix: Nếu bạn có tập lệnh Perl, bạn cũng có thể làm cho nó xóa văn bản được đặt trong ngoặc đơn. Trong Perl, bạn có thể viết s/\[[^\[\]]*\]//g(tức là sử dụng dấu gạch chéo ngược để thoát khỏi các thành viên của bộ ký tự).
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles bạn có thể giải thích thêm về [^] [] chính xác không. cảm ơn bạn
Arash

1
@arashams […]= bộ ký tự. ^như ký tự đầu tiên có nghĩa là bổ sung cho tập hợp. ]thông thường sẽ được đánh dấu là kết thúc của tập hợp, nhưng nếu đó là ký tự đầu tiên khác ^, thì đó là một ký tự bình thường - một tập hợp trống hoặc phần bù của tập hợp trống không được phép. Sau đó [là bình thường và ]kết thúc bộ.
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles tnx vì sự giúp đỡ của bạn nhưng tôi vẫn không hiểu :( nghĩa là gì? "^ Vì ký tự đầu tiên có nghĩa là bổ sung cho tập hợp" ý tôi là nó đang làm gì? Ví dụ như nó phù hợp với tất cả nội dung?
Arash

10

Lệnh sed -e 's/([^()]*)//g'sẽ làm dấu ngoặc đơn thay vì ngoặc.

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.