Eliminar líneas que comienzan con #

10

¿Cómo elimino las líneas que comienzan con a #, dado que puede haber espacios en blanco a la izquierda y a la derecha de la #?

  # Master socket provides access to userdb information. It's typically
chris4000
fuente

Respuestas:

13

Esto parece funcionar, pero no lo he pensado profundamente:

sed -e '/^[[:space:]]*#/d'
Ulrich Schwarz
fuente
10

Puedes usar greppara eso

grep -vh '^[[:space:]]*#' filename

Dado que, como presumo, está eliminando comentarios de algún archivo, también podría considerar eliminar las líneas vacías, lo que expande lo anterior a:

grep -vh '^[[:space:]]*\(#\|$\)' filename
rozcietrzewiacz
fuente
3

awk La solución es invertir la coincidencia de su patrón.

$> cat ./text
elephant
# Master socket provides access to userdb information. It's typically
zoo
 #ok
penguin
# !

$> awk '!/^(\ )*#/ {print $0}' ./text
elephant
zoo
penguin
ДМИТРИЙ МАЛИКОВ
fuente
44
No hay necesidad de escapar el carácter de espacio, no hay necesidad de capturar el carácter de espacio, no hay necesidad de especificar la acción predeterminada: awk '!/^ *#/' ./text.
manatwork
awk '/^ *#/{next}1' fileDebería ser lo suficientemente bueno.
jaypal singh
0
perl -ne 'print if ! /^\s*#/' ./text
Peter John Acklam
fuente
hola @ Peter-john-acklam, ¿funcionaría esto si el código es seguido por # comentario?
Nikhil Mulley
0

Utilizando los datos de muestra publicados por ДМИТРИЙ МАЛИКОВ ...

$ grep -vPh '^\s*#' filename.txt | grep -Po '\w+'
elephant
zoo
penguin

Prefiero usar pcre con grep, así que uso el interruptor -P para grep (debe ser GNU grep). El segundo grep es azúcar puro para darte las palabras sin espacios en blanco. También "eliminaría" las líneas vacías.

Jim
fuente
-1
$ perl -pi -e '$_="" if /^\s*#/' filename
Zaid
fuente
Eso no es bueno: no elimina líneas y borra líneas comoa#b
Mat