İki belirli dize arasındaki metni kaldırma


10

Aşağıdaki gibi bir dosya var:

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

Sonrasına PIkadar metni kaldırmak istiyorum Value:. denedim

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

Herhangi bir yardım?

Yanıtlar:


20

Her şeyi değiştirin PIiçin Value:boş dize ile:

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

10
Bu , farklı hatlarda gerçekleşir PIve Value:gerçekleşir mi?
Brian Fitzpatrick

6

dKomutunu kullanmak sedtüm satırı siler. Ayrıca neden <ve kullandığınızdan emin değilim >. Belki onları karıştırıyorsunuz \<ve \>bu grepkelime sınırlarını belirtmek için kullanılıyor? Bu durumda, her iki kelime sınırı için de (başlangıç ​​ve bitiş) sedkullanımları gerektiğini bilmelisiniz \b. Böylece şöyle bir şey yazabilirsiniz:

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

Ekstra dayanıklı olması için, ben kullanırım perltembel ölçümü için .sadece ilk geçtiği arasındaki metni silmek böylece PIve ilk geçtiği Value:. Tabii ki hepsi sizin kullanım durumunuza bağlıdır.

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

1

Desenler arasındaki birden çok çizgiyi (desen içeren çizgiler dahil) kaldırmak için aşağıdaki kodu kullanın:

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

Dosyanızı doğrudan değiştirmek istiyorsanız:

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

Buradaki ayrım dikkat edin - bu , iki dizge arasındaki metni silmeyi isterken, bir aralıktaki satırları siler .
Jeff Schaller
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.