El primero se ^refiere al comienzo de la línea, por lo que no se excluirán las líneas con comentarios que comiencen después del primer carácter. [^#;]significa cualquier carácter que no sea #o ;.
En otras palabras, informa líneas que comienzan con cualquier carácter que no sea #y ;. No es lo mismo que informar las líneas que no comienzan #y ;(para las que usaría grep -v '^[#;]'), ya que también excluye las líneas vacías , pero eso es probablemente preferible en este caso, ya que dudo que le interesen las líneas vacías.
Si desea ignorar los caracteres en blanco iniciales, puede cambiarlo a:
la respuesta correcta es: cat /etc/samba/smb.conf | grep ^[^#\;]Pero de todos modos, gracias
denys
Sí, o podrías usar "comillas"; Lo edité posteriormente.
Ricitos de oro
77
@denys Estás equivocado: la respuesta de Ricitos de Oro no es peor que la tuya. .1 ¡Evite usar la cat ...| sintaxis !. .2 Para batir líneas vacías Y líneas que contienen solo espacio, tal vez con comentarios U podría usar esto:grep -v "^ *\(#.*\|\)$" < smb.conf
F. Hauri
77
@EmanuelBerg Es un tenedor inútil. cat file | grep "blah"implica ejecutar dos binarios a través de un quince , mientras que grep "blah" <filehace exactamente lo mismo y se une filenaturalmente a grep's STDIN. [bash] gato inútil es un tema de búsqueda con todas las funciones a través de cualquier motor de búsqueda! -> blog.sanctum.geek.nz/useless-use-of-cat ... para muestra
F. Hauri
2
No hace exactamente lo mismo . Crea 2 procesos y una tubería donde 1 proceso es suficiente. Lea el enlace dado en el último comentario de @ F.Hauri.
rahmu
4
Solución Vim:
:v/^\s*[#\n]/p
Me encontré con esta pregunta al intentar encontrar la solución vim yo mismo.
Esto también eliminaría las líneas que comienzan con espacios en blanco.
Kusalananda
Cierto. Me pareció útil para los archivos de configuración, ya que las líneas entre comentarios llenan el resultado. Si prefieres mantener las líneas en blanco, cambia el me gusta *para +que así:v/^\s+[#\n]/p
David Lord,
3
La tubería para grep en la respuesta de oliver nadj puede eliminarse (suponiendo GNU grepo compatible):
Estos ejemplos pueden ser útiles para las personas.
[user@host tmp]$ cat whitespacetest
# Line 1 is a comment with hash symbol as first char
# Line 2 is a comment with hash symbol as second char
# Line 3 is a comment with hash symbol as third char
# Line 4 is a comment with tab first, then hash
; Line 5 is a comment with tab first, then semicolon. Comment char is ;
; Line 6 is a comment with semicolon symbol as first char
[user@host tmp]$
El primer ejemplo grep excluye líneas que comienzan con cualquier cantidad de espacio en blanco seguido de un símbolo hash.
[user@host tmp]$ grep -v '^[[:space:]]*#' whitespacetest
; Line 5 is a comment with tab first, then semicolon. Comment char is ;
; Line 6 is a comment with semicolon symbol as first char
[user@host tmp]$
El segundo excluye las líneas que comienzan con cualquier cantidad de espacio en blanco seguido de un símbolo hash o punto y coma.
¿En qué tipo de archivos conf se usan <o se /usan para comentarios? Conozco muchos formatos de archivos conf donde <hay de todo menos un comentario. !a veces se usa como en los archivos de recursos X.
testparm
hacerlo mejor ya que también muestra valores predeterminados.Respuestas:
El primero se
^
refiere al comienzo de la línea, por lo que no se excluirán las líneas con comentarios que comiencen después del primer carácter.[^#;]
significa cualquier carácter que no sea#
o;
.En otras palabras, informa líneas que comienzan con cualquier carácter que no sea
#
y;
. No es lo mismo que informar las líneas que no comienzan#
y;
(para las que usaríagrep -v '^[#;]'
), ya que también excluye las líneas vacías , pero eso es probablemente preferible en este caso, ya que dudo que le interesen las líneas vacías.Si desea ignorar los caracteres en blanco iniciales, puede cambiarlo a:
o
O
fuente
cat /etc/samba/smb.conf | grep ^[^#\;]
Pero de todos modos, graciascat ...|
sintaxis !. .2 Para batir líneas vacías Y líneas que contienen solo espacio, tal vez con comentarios U podría usar esto:grep -v "^ *\(#.*\|\)$" < smb.conf
cat file | grep "blah"
implica ejecutar dos binarios a través de un quince , mientras quegrep "blah" <file
hace exactamente lo mismo y se unefile
naturalmente a grep'sSTDIN
. [bash] gato inútil es un tema de búsqueda con todas las funciones a través de cualquier motor de búsqueda! -> blog.sanctum.geek.nz/useless-use-of-cat ... para muestraSolución Vim:
Me encontré con esta pregunta al intentar encontrar la solución vim yo mismo.
fuente
*
para+
que así:v/^\s+[#\n]/p
La tubería para grep en la respuesta de oliver nadj puede eliminarse (suponiendo GNU
grep
o compatible):fuente
Eso es lo que funciona para mí. ignore las líneas comentadas o vacías, incluso los espacios en blanco antes de la marca de punto o el punto y coma
fuente
Estos ejemplos pueden ser útiles para las personas.
El primer ejemplo grep excluye líneas que comienzan con cualquier cantidad de espacio en blanco seguido de un símbolo hash.
El segundo excluye las líneas que comienzan con cualquier cantidad de espacio en blanco seguido de un símbolo hash o punto y coma.
fuente
Aquí obtuve una mejor (suponiendo GNU
grep
o compatible):excluya las líneas que comienzan con
#;/%<
corchetes y el segundo filtro después de la tubería es\s*$
para líneas en blanco.fuente
<
o se/
usan para comentarios? Conozco muchos formatos de archivos conf donde<
hay de todo menos un comentario.!
a veces se usa como en los archivos de recursos X.Este es mucho mejor, lo obtuve de https://stackoverflow.com/questions/17392869/how-to-print-a-file-excluding-comments-and-blank-lines-using-grep-sed
Asume GNU
grep
o compatible.fuente
;
como un comentario que debe eliminarse.Este comando es grep toda la información en el archivo, excepto los comentarios y las líneas en blanco.
fuente
;
Esto debería mostrar el archivo sin esas líneas que comienzan con
#
:grep -v "^#" filename
fuente
;
.