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
=> aesed -n -e '/b/,/d/p' abcde
=> acsed -n -e '/b/,/d///!p' abcde
=> dosed -n -e '/b/,/d///p' abcde
=> bdsed -e '/b/,/d/!d' abcde
=> acsed -e '/b/,/d/d' abcde
=> aesed -e '/b/,/d///!d' abcde
=> abdesed -e '/b/,/d///d' abcde
=> as
Nos puedes añadir valor a nuestro contenido informacional tributando tu experiencia en las explicaciones.