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

Respuestas:


13

Esto parece funcionar, pero no lo he pensado profundamente:

sed -e '/^[[:space:]]*#/d'

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

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

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

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.


-1
$ perl -pi -e '$_="" if /^\s*#/' filename

Eso no es bueno: no elimina líneas y borra líneas comoa#b
Mat
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.