unix sed – ¿Usar sed para eliminar todo entre dos palabras?

Pregunta:

Esto no parece funcionar

The next example would delete everything between "ONE" and "TWO:" 

#!/bin/sh
sed '
/ONE/ {
# append a line
    N
# search for TWO on the second line 
    /\n.*TWO/ {
# found it - now edit making one line
        s/ONE.*\n.*TWO/ONE TWO/
    }
}' file

Esperaba eliminar todo entre UNO y DOS. Intenté con el archivo que contiene el archivo.

[user5@mailserver ~]$ cat file
ONE
hello
TWO

pero la salida viene como

[user5@mailserver ~]$ ./test
ONE
hello
TWO

Esperaba ONE TWO Estoy tratando de corregirlo pero no puedo hacerlo.

Respuesta:

Esto hará el trabajo

sed '/^ONE/,/TWO/{/^ONE/!{/TWO/!d}}' file

/^ONE/,/TWO/ Mira la primera línea que comienza con ONE hasta TWO

{/^ONE/! haz lo siguiente si mi línea no comienza con ONE

{/TWO/!d}} hago lo siguiente si mi línea no comienza con TWO y delete

Para veranoizar lo anterior:

Encuentre todo lo que comience con ONE hasta TWO . Se ejecuta otra comprobación, lo que significa que encuentre todo lo que no coincida con 'UNO and DOS' y elimine el resto.

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Ir arriba