¿Cómo grep líneas que no comienzan con "#" o ";"?


78

Quiero grep smb.confy ver solo líneas que no están comentadas.


1
testparmhacerlo mejor ya que también muestra valores predeterminados.
— F. Hauri

@ F.Hauri Gracias. Funciona también. Pero también produce información innecesaria (en mi caso), que también debería ser asimilada ...
— niega el


Otra forma a través de PCRE grep stackoverflow.com/a/45917459/3297613
— Avinash Raj

Respuestas:


125
grep "^[^#;]" smb.conf

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:

grep '^[[:blank:]]*[^[:blank:]#;]' smb.conf

o

grep -vxE '[[:blank:]]*([#;].*)?' smb.conf

O

awk '$1 ~ /^[^;#]/' smb.conf

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 file naturalmente 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.


1
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):

grep -v "^\s*[#\;]\|^\s*$" <some_conf_file>

En segundo lugar, grep i @ nadj parece inútil, la respuesta de @ goldilocks fue más que suficiente.
— Archemar

1
Estoy de acuerdo en que la respuesta de Ricitos de Oro fue correcta. Sin embargo, también consideré útil no mostrar líneas vacías.
— Morten Lind el

2
grep -v "^\s*[#;]" any.conf | grep -v "^\s*$"

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


2

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.

[user@host tmp]$ grep -v '^[[:space:]]*[#;]' whitespacetest

[user@host tmp]$

0

Aquí obtuve una mejor (suponiendo GNU grepo compatible):

grep -v '^[#;/%<]\|^\s*$' anyfile.conf

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.


2
¿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.
— Stéphane Chazelas


-2
egrep -v "^#|^$" anyfile.txt

Este comando es grep toda la información en el archivo, excepto los comentarios y las líneas en blanco.


2
Tenga en cuenta que smb.conf también comenta con;
— Jeff Schaller

-3

Esto debería mostrar el archivo sin esas líneas que comienzan con #: grep -v "^#" filename


Esto no hace nada a las líneas que comienzan con ;.
— Kusalananda
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.