Удаление текста между двумя конкретными строками

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' 

Любая помощь?

Халил Саад
источник

Ответы:

20

Замените все с PIна Value:пустую строку:

sed 's/PI.*Value://'
danadam
источник
10
Будет ли это работать, если PIи Value:происходит на разных линиях?
Брайан Фицпатрик,
6

Использование dкоманды in 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
Feriman
источник
Обратите внимание на различие здесь - это удаляет строки в диапазоне, в то время как возникает вопрос об удалении текста между двумя строками.
Джефф Шаллер