Actualmente estoy tratando de hacer un script que grep de entrada para ver si algo es de un determinado tipo de archivo (zip, por ejemplo), aunque en el texto antes de que el tipo de archivo puede ser cualquier cosa, así que por ejemplo

something.zip
this.zip
that.zip

todos los que caen bajo la categoría. Estoy tratando de grep para estas usando un comodín, y hasta ahora me han tratado este

grep ".*.zip"

Pero siempre que hago eso, se encuentra el .zip archivos bien, pero aún así la salida de pantalla si existen caracteres adicionales después de la .zip así, por ejemplo .zippppppp o .zipdsjdskjc todavía sería recogido por grep. Dicho esto, ¿qué debo hacer para prevenir grep de la visualización de los partidos que han caracteres adicionales después de la .zip?

OriginalEl autor lacrosse1991 | 2012-11-11

9 Comentarios

  1. 46

    De prueba para el final de la línea con $ y escapar de la segunda . con una barra invertida, de modo que solo coincide con un período y no cualquier personaje.

    grep ".*\.zip$"

    Sin embargo ls *.zip es una forma más natural de hacer esto si desea una lista de todos los .zip archivos en el directorio actual o find . -name "*.zip" para todos los .zip archivos en la sub-directorios a partir de (e incluyendo) el directorio actual.

    ¿grep "\.zip"
    el \.zip$ utiliza el $ para denotar al final de la línea. Esto significa que incluso un archivo con «.zip» en el nombre del archivo (que sería una locura) no se activaba el filtro. El archivo debe tiene un .zip extensión para ser atrapados por el filtro.

    OriginalEl autor Chris Seymour

  2. 5

    Usted necesita para hacer un par de cosas. Se debe tener este aspecto:

    grep '.*\.zip$'

    Necesita escapar el segundo punto, por lo que se acaba de coincidir con un punto, y no cualquier personaje. El uso de comillas simples hace que el escape de un poco más fácil.

    Usted necesita el signo de dólar en el final de la línea para indicar que desea que el «zip» para ocurrir al final de la línea.

    OriginalEl autor Vaughn Cato

  3. 2

    Tratar: grep -o -E "(\\.([A-z])+)+"

    He usado este para obtener multi-punteado/múltiples extensiones. Así que si la entrada se hello.tar.gz, a continuación, que sería la salida de .tar.gz.
    Para una sola de puntos, el uso de grep -o -E "\\.([A-z])+$".
    Probado en Cygwin/MingW+MSYS.

    OriginalEl autor dsrdakota

  4. 2

    Puedo usar esto para obtener una lista de los tipos de archivo dentro de una carpeta.

    find . -type f | egrep -i -E -o "\.{1}\w*$" | sort -su

    Salidas por ejemplo:

    .DS_Store
    .MP3
    .aif
    .aiff
    .asd
    .doc
    .flac
    .jpg
    .m4a
    .m4p
    .m4r
    .mp3
    .pdf
    .png
    .txt
    .wav
    .wma
    .zip

    BONO: con

    find . -type f | egrep -i -E -o "\.{1}\w*$" | sort | uniq -c

    Podrás obtener el recuento de archivo:

        106 .DS_Store
         35 .MP3
         89 .aif
          5 .aiff
        525 .asd
          1 .doc
         60 .flac
         48 .jpg
        149 .m4a
         11 .m4p
          1 .m4r
      12844 .mp3
          1 .pdf
          5 .png
          9 .txt
        108 .wav
         44 .wma
          2 .zip

    OriginalEl autor index opout

  5. 2

    También puede usar grep para buscar todos los archivos con una extensión específica:

    find .|grep -e "\.gz$"

    La . significa la carpeta actual.
    Si desea especificar una carpeta distinta de la carpeta actual, basta con sustituir el . con la ruta de la carpeta.
    Aquí está un ejemplo: Permite buscar todos los archivos que terminan con .gz y están en la carpeta /var/log

      find /var/log/ |grep -e "\.gz$"

    El resultado es algo similar a la siguiente:

      ⚙> find /var/log/ |grep -e "\.gz$"
    
    /var/log//mail.log.1.gz
    /var/log//mail.log.0.gz
    /var/log//system.log.3.gz
    /var/log//system.log.7.gz
    /var/log//system.log.6.gz
    /var/log//system.log.2.gz
    /var/log//system.log.5.gz
    /var/log//system.log.1.gz
    /var/log//system.log.0.gz
    /var/log//system.log.4.gz

    La $ signo básicamente estadísticas que la extensión de archivo es el que termina con gz

    OriginalEl autor Stryker

  6. 1

    Uno más fix/addon del ejemplo anterior:

    # multi-dotted/multiple extensions
    grep -oEi "(\.([A-z0-9])+)+" file.txt
    
    # single dotted
    grep -oEi "\.([A-z0-9])+$" file.txt

    De esta manera se consigue extensiones de archivo como».mp3 » y etc.

    OriginalEl autor browseman

  7. 1

    Sólo revisar algunas de las otras respuestas. El .* no es necesario, y si usted está buscando para una determinada extensión de archivo, es mejor incluir -i, de modo que es sensible a las mayúsculas; en caso de que el archivo es HELLO.ZIP por ejemplo. No creo que las comillas son necesarias, ya sea de.

    grep -i \.zip$
    Esta es la mejor respuesta, en mi opinión, ya que se utiliza la menor cantidad de caracteres para obtener el resultado deseado, y su mayúsculas y minúsculas, lo cual es importante para un comodín tipo de funcionalidad.

    OriginalEl autor twasbrillig

  8. 0

    Simplemente hacer :

    grep ".*.zip$"

    El»$», indica el final de la línea de

    Nota, esto incluye los archivos como hello.unzip o hi.xzip, o incluso hellozip. Usted debe escapar de la segunda «.»

    OriginalEl autor AaronO

Dejar respuesta

Please enter your comment!
Please enter your name here