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.