Eliminar texto entre dos cadenas específicas


10

Tengo un archivo de la siguiente manera:

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

Quiero eliminar el texto PIhasta Value:. Lo intenté

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

¿Alguna ayuda?

Respuestas:


20

Reemplace todo desde PIa Value:con una cadena vacía:

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

10
Será este trabajo si PIy Value:producir en diferentes líneas?
Brian Fitzpatrick

6

El uso del dcomando en sedeliminará toda la línea. Además, no estoy seguro de por qué estás usando <y >. ¿Tal vez los estás confundiendo \<y \>eso grepusa para denotar límites de palabras? En ese caso, debe saber que se sedusa \bpara ambos tipos de límites de palabras (principio y fin). Entonces puedes escribir algo como esto:

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

Para mayor robustez, lo usaría perlpara la cuantificación diferida de .modo que solo elimine el texto entre la primera aparición de PIy la primera aparición de Value:. Por supuesto, todo depende de su caso de uso.

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

1

Use este código a continuación para eliminar varias líneas entre patrones (incluidas las líneas con patrones):

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

Si desea modificar su_archivo directamente:

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

Observe la distinción aquí: esto elimina líneas en un rango, mientras que la pregunta es eliminar texto entre dos cadenas.
Jeff Schaller
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.