Xóa văn bản giữa hai chuỗi cụ thể


10

Tôi có một tập tin như dưới đây:

mime PI Name: ISHO SUCCESS RATE RT, Value: 95.663826
scr  PI Name: RRC Access Failures due to UU, Value: 0.13394141
prog PI Name: RRC Access Failures due to UU, Value: 0.16077702
sch PI Name: RRC Access Failures due to UU, Value: 0.11781933

Tôi muốn xóa văn bản PIcho đến khi Value:. Tôi đã thử

sed '/<PI>/,/<\/Value:>/d' 

Có ai giúp đỡ không?

Câu trả lời:


20

Thay thế mọi thứ từ PIđến Value:bằng chuỗi rỗng:

sed 's/PI.*Value://'

10
Điều này sẽ làm việc nếu PIValue:xảy ra trên các dòng khác nhau?
Brian Fitzpatrick

6

Sử dụng dlệnh trong sedsẽ xóa toàn bộ dòng. Ngoài ra, tôi không chắc tại sao bạn lại sử dụng <>. Có lẽ bạn đang nhầm lẫn chúng với \<\>điều đó grepsử dụng để biểu thị ranh giới từ? Trong trường hợp đó, bạn nên biết rằng sedsử dụng \bcho cả hai loại ranh giới từ (bắt đầu và kết thúc). Vì vậy, bạn có thể viết một cái gì đó như thế này:

sed -i 's/\bPI\b.*\bValue:\b//' your_file

Để tăng thêm sức mạnh, tôi sẽ sử dụng perlđể định lượng lười biếng .để bạn chỉ xóa văn bản giữa lần xuất hiện đầu tiên PIvà lần xuất hiện đầu tiên Value:. Tất nhiên tất cả phụ thuộc vào trường hợp sử dụng của bạn.

perl -pi -e 's{ \b PI \b .*? \b Value: \b}{}x' your_file

1

Sử dụng mã dưới đây để loại bỏ nhiều dòng giữa các mẫu (bao gồm các dòng có mẫu):

sed "/PI/,/Value:/d" your_file

Nếu bạn muốn sửa đổi your_file trực tiếp:

sed -i "/PI/,/Value:/d" your_file

Lưu ý phân biệt ở đây - điều này xóa các dòng trong một phạm vi, trong khi câu hỏi đang yêu cầu xóa văn bản giữa hai chuỗi.
Jeff Schaller
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.