Видалення тексту між двома певними рядками


10

У мене є файл, як показано нижче:

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

Я хочу видалити текст PIдо Value:. я намагався

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

Будь-яка допомога?

Відповіді:



6

За допомогою dкоманди в sedбуде видалено весь рядок. Крім того, я не впевнений, чому ви використовуєте <та >. Можливо, ви їх плутаєте \<і \>це grepвикористовує для позначення меж слова? У цьому випадку ви повинні знати, що sedвикористовується \bдля обох типів меж слова (починаючи і закінчуючи). Тож ви можете написати щось подібне:

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

Для додаткової надійності я б використав perlдля ледачої кількісної оцінки, .щоб ви видалили текст лише між першим виникненням PIта першим появою Value:. Звичайно, все залежить від вашого випадку використання.

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

1

Використовуйте цей код нижче, щоб видалити кілька рядків між візерунками (включаючи лінії з візерунками):

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

Якщо ви хочете безпосередньо змінити файл_файлу:

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

Зверніть увагу на відмінність тут - це видаляє рядки в діапазоні, тоді як питання вимагає видалення тексту між двома рядками.
Джефф Шаллер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.