Saltar al contenido

Usando sed para eliminar todas las líneas entre dos patrones coincidentes

Este enunciado fue aprobado por nuestros expertos para garantizar la exactitud de nuestra esta noticia.

Solución:

Use este comando sed para lograr eso:

sed '/^#/,/^$//^#/!/^$/!d' file.txt

Usuarios de Mac (para evitar extra characters at the end of d command error) necesita agregar punto y coma antes de los corchetes de cierre

sed '/^#/,/^$//^#/!/^$/!d;;' file.txt

PRODUCCIÓN

# ID 1
$ description 1
blah blah
# ID 2
$ description 2
blah blah
blah blah

Explicación:

  • /^#/,/^$/ coincidirá con todo el texto entre líneas que comiencen con # a las líneas que comienzan con $. ^ se utiliza para el carácter de inicio de línea. $ es un carácter especial, por lo que debe escaparse.
  • /^#/! significa hacer lo siguiente si el comienzo de la línea no es #
  • /^$/! significa hacer lo siguiente si el comienzo de la línea no es $
  • d significa eliminar

Entonces, en general, primero está haciendo coincidir todas las líneas de ^# para ^$ luego de esas líneas emparejadas encontrando líneas que no coinciden^# y no coinciden^$ y borrarlos usando d.

$ cat test
1
start
2
end
3
$ sed -n '1,/start/p;/end/,$p' test
1
start
end
3
$ sed '/start/,/end/d' test
1
3

En forma general, si tiene un archivo con contenido de forma a B C D edonde la sección a precede al patrón bluego la sección C precede al patrón dluego la sección mi sigue, y se aplica lo siguiente sed comandos, obtendrá los siguientes resultados.

En esta demostración, la salida está representada por => abcde, donde las letras muestran qué secciones estarían en la salida. De este modo, ae muestra una salida de solo secciones a y mi, ace serían secciones a, Cy mietc.

Tenga en cuenta que si b o d aparecen en la salida, esos son los patrones que aparecen (es decir, se tratan como si fueran secciones en la salida).

Tampoco confundas el /d/ patrón con el comando d. El comando está siempre al final en estas demostraciones. El patrón es siempre entre el //.

  • sed -n -e '/b/,/d/!p' abcde => ae
  • sed -n -e '/b/,/d/p' abcde => ac
  • sed -n -e '/b/,/d///!p' abcde => do
  • sed -n -e '/b/,/d///p' abcde => bd
  • sed -e '/b/,/d/!d' abcde => ac
  • sed -e '/b/,/d/d' abcde => ae
  • sed -e '/b/,/d///!d' abcde => abde
  • sed -e '/b/,/d///d' abcde => as

Nos puedes añadir valor a nuestro contenido informacional tributando tu experiencia en las explicaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *