Menghapus teks di antara dua string spesifik


10

Saya punya file seperti di bawah ini:

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

Saya ingin menghapus teks PIhingga Value:. Saya mencoba

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

Ada bantuan?

Jawaban:


20

Ganti semuanya dari PImenjadi Value:dengan string kosong:

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

10
Apakah ini akan berhasil jika PIdan Value:terjadi pada garis yang berbeda?
Brian Fitzpatrick

6

Menggunakan dperintah dalam sedakan menghapus seluruh baris. Juga, saya tidak yakin mengapa Anda menggunakan <dan >. Mungkin Anda membingungkan mereka \<dan \>yang grepdigunakan untuk menunjukkan batas kata? Dalam hal ini, Anda harus tahu bahwa sedpenggunaan \buntuk kedua jenis batas kata (awal dan akhir). Jadi Anda dapat menulis sesuatu seperti ini:

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

Untuk ketahanan ekstra, saya akan gunakan perluntuk kuantifikasi malas .sehingga Anda hanya menghapus teks antara kemunculan pertama PIdan kemunculan pertama Value:. Tentu saja itu semua tergantung pada use case Anda.

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

1

Gunakan kode di bawah ini untuk menghapus beberapa garis antar pola (termasuk garis dengan pola):

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

Jika Anda ingin memodifikasi file_Anda secara langsung:

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

Perhatikan perbedaannya di sini - ini menghapus garis dalam rentang, sementara pertanyaannya adalah meminta menghapus teks di antara dua string.
Jeff Schaller
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.