[ LÉAME | Guía del usuario | Indexación | Puntos de referencia | Preguntas y respuestas]
¡La opción -Q abre una TUI de consulta para buscar archivos mientras escribes!
ugrep es rápido, fácil de usar y está equipado con un montón de funciones nuevas que los usuarios querían
incluye una TUI interactiva con ayuda incorporada, búsqueda similar a Google con patrones Y/O/NO, búsqueda difusa, búsqueda (anidada) de archivos zip/7z/tar/pax/cpio, archivos tar y archivos comprimidos gz/Z/bz/ bz2/lzma/xz/lz4/zstd/brotli, búsqueda y volcado hexadecimal de archivos binarios, búsqueda de documentos como PDF, doc, docx y salida en JSON, XML, CSV o tu propio formato personalizado
Sintaxis de patrones de expresiones regulares extendida Unicode con coincidencia de patrones de varias líneas sin necesidad de opciones especiales de línea de comandos
Incluye un indexador de archivos para acelerar la búsqueda en sistemas de archivos lentos y fríos.
un verdadero reemplazo directo para GNU grep (suponiendo que copie o enlace simbólicamente ug
a grep
y a egrep
y fgrep
), a diferencia de otros grep populares que afirman ser "alternativas de grep" o "reemplazos" cuando en realidad implementan una línea de comandos incompatible opciones y use un comparador de expresiones regulares incompatible, es decir, solo expresiones regulares de Perl versus POSIX BRE (grep) y ERE (egrep) cuando ugrep admite todos los modos de expresiones regulares
Los puntos de referencia muestran que ugrep es (uno de) los grep más rápidos que utilizan el comparador de expresiones regulares RE/flex de alto rendimiento basado en DFA.
Si se debe mejorar o agregar algo a ugrep, ¡hágamelo saber!
La prioridad número uno es la garantía de calidad para continuar asegurándonos de que ugrep no tenga errores y sea confiable.
haga que ugrep se ejecute aún más rápido, consulte, por ejemplo, #432, #421
compartir resultados de rendimiento reproducibles
ug
es para uso interactivo, que carga un archivo de configuración .ugrep opcional con sus preferencias ubicado en el directorio de trabajo o en el directorio de inicio, ug+
también busca archivos PDF, documentos, libros electrónicos y metadatos de imágenes.
ugrep
para uso por lotes como GNU grep sin un archivo de configuración .ugrep, ugrep+
también busca archivos PDF, documentos, libros electrónicos y metadatos de imágenes.
Coincide con patrones Unicode de forma predeterminada y busca automáticamente archivos codificados en UTF-8, UTF-16 y UTF-32.
Coincide con varias líneas con n
o R
en patrones de expresiones regulares, ¡no se requieren opciones especiales para hacerlo!
Ayuda integrada: ug --help
, donde ug --help WHAT
muestra opciones relacionadas con WHAT
estás buscando
ug --help regex
, ug --help globs
, ug --help fuzzy
, ug --help format
.
Fácil de usar con archivos de configuración personalizables utilizados por el comando ug
destinado a uso interactivo que carga un archivo de configuración .ugrep con sus preferencias
ug PATTERN ... ugrep --config PATTERN ...
ug --save-config ...options-you-want-to-save...
guarda un archivo de configuración .ugrep en el directorio de trabajo para que la próxima vez que ejecute ug
allí utilice estas opciones. Haga esto en su directorio de inicio para guardar un archivo de configuración .ugrep con las opciones que generalmente desea usar.
Consulta interactiva TUI, presione F1 o CTRL-Z para obtener ayuda y TAB/SHIFT-TAB para navegar a directorios y archivos
ug -Q ug -Q -e PATTERN
-Q
reemplaza PATTERN
en la línea de comando para permitirle ingresar patrones de forma interactiva en la TUI. En la TUI, utilice ALT+teclas de letras para activar/desactivar las "opciones de letras" cortas, por ejemplo ALT-n (opción -n
) para mostrar/ocultar números de línea.
Busque el contenido de archivos (zip, tar, pax, jar, cpio, 7z) y archivos comprimidos (gz, Z, bz, bz2, lzma, xz, lz4, zstd, brotli)
ug -z PATTERN ... ug -z --zmax=2 PATTERN ...
Especifique -z --zmax=2
para buscar archivos comprimidos y archivos anidados dentro de archivos. El argumento --zmax
puede variar de 1 (predeterminado) a 99 para hasta 99 pasos de descompresión y desarchivado para buscar archivos anidados.
Busque con patrones de consulta booleanos similares a los de Google usando patrones -%
con AND
(o solo espacio), OR
(o una barra |
), NOT
(o un guión -
), usando comillas para que coincidan exactamente y agrupando con ( )
(que se muestra en el lado izquierdo abajo); o con opciones -e
(como "o"), --and
, --andnot
y --not
patrones de expresiones regulares (que se muestran en el lado derecho a continuación):
ug -% 'A B C' ... ug -e 'A' --and 'B' --and 'C' ...
ug -% 'A|B C' ... ug -e 'A' -e 'B' --and 'C' ...
ug -% 'A -B -C' ... ug -e 'A' --andnot 'B' --andnot 'C' ...
ug -% 'A -(B|C)'... ug -e 'A' --andnot 'B' --andnot 'C' ...
ug -% '"abc" "def"' ... ug -e 'QabcE' --and 'QdefE' ...
donde A
, B
y C
son patrones de expresiones regulares arbitrarios (use la opción -F
para buscar cadenas)
especifique la opción -%%
( --bool --files
) para aplicar la consulta booleana a los archivos en su conjunto: un archivo coincide si se cumplen todas las condiciones booleanas al hacer coincidir los patrones en todo el archivo. De lo contrario, las condiciones booleanas se aplican a líneas individuales de forma predeterminada, ya que las utilidades grep generalmente comparan patrones basados en líneas. La opción --stats
muestra la consulta en formato legible por humanos una vez completada la búsqueda.
Busque pdf, doc, docx, libros electrónicos y más con ug+
usando filtros asociados con las extensiones de nombre de archivo:
ug+ PATTERN ...
o especifique --filter
con un tipo de archivo para usar una utilidad de filtro:
ug --filter='pdf:pdftotext % -' PATTERN ...
ug --filter='doc:antiword %' PATTERN ...
ug --filter='odt,docx,epub,rtf:pandoc --wrap=preserve -t plain % -o -' PATTERN ...
ug --filter='odt,doc,docx,rtf,xls,xlsx,ppt,pptx:soffice --headless --cat %' PATTERN ...
ug --filter='pem:openssl x509 -text,cer,crt,der:openssl x509 -text -inform der' PATTERN ...
ug --filter='latin1:iconv -f LATIN1 -t UTF-8' PATTERN ...
El comando ug+
es el mismo que el comando ug
, pero también utiliza filtros para buscar archivos PDF, documentos y metadatos de imágenes.
Muestre el contexto horizontal con la opción -o
( --only-matching
) y las opciones de contexto -ABC
, por ejemplo, para buscar coincidencias en líneas muy largas, como fuentes Javascript y JSON:
ug -o -C20 -nk PATTERN longlines.js
-o -C20
ajusta todas las coincidencias con un contexto de 20 caracteres antes y 20 caracteres después de una coincidencia (es decir, 40 caracteres Unicode en total), -nk
genera números de línea y columna.
Encuentre coincidencias de patrones aproximadas con búsqueda difusa, dentro de la distancia de Levenshtein especificada
ug -Z PATTERN ... ug -Z3 PATTTERN ...
-Zn
coincide con hasta n
caracteres adicionales, faltantes o reemplazados, -Z+n
coincide con hasta n
caracteres adicionales, -Zn
coincide con hasta n
caracteres faltantes y -Z~n
coincide con hasta n
caracteres reemplazados. -Z
por defecto es -Z1
.
Búsqueda tipo Fzf con expresiones regulares (o cadenas fijas con -F
), coincidencia aproximada con hasta 4 caracteres adicionales con -Z+4
y palabras solo con -w
, usando -%%
para búsquedas booleanas en todo el archivo
ug -Q -%% -l -w -Z+4 --sort=best
-l
enumera los archivos coincidentes en la TUI, presione TAB
y luego ALT-y
para ver un archivo, SHIFT-TAB
y Alt-l
para regresar y ver la lista de archivos coincidentes ordenados por mejor coincidencia
Busque archivos binarios y muestre volcados hexadecimales con coincidencias de patrones binarios (texto Unicode o -U
para patrones de bytes)
ug --hexdump -U BYTEPATTERN ... ug --hexdump TEXTPATTERN ...
ug -X -U BYTEPATTERN ... ug -X TEXTPATTERN ...
ug -W -U BYTEPATTERN ... ug -W TEXTPATTERN ...
--hexdump=4chC1
muestra 4
columnas hexadecimales sin una columna de caracteres c
, sin espacio hexadecimal h
y con una línea hexadecimal adicional C1
antes y después de una coincidencia.
Incluya archivos para buscar por tipos de archivos o "bytes mágicos" de archivos o exclúyalos con ^
ug -t TYPE PATTERN ... ug -t ^TYPE PATTERN ...
ug -M 'MAGIC' PATTERN ... ug -M '^MAGIC' PATTERN ...
Incluya archivos y directorios para buscar que coincidan con globs de estilo gitignore o exclúyalos con ^
ug -g 'FILEGLOB' PATTERN ... ug -g '^FILEGLOB' PATTERN ...
ug -g 'DIRGLOB/' PATTERN ... ug -g '^DIRGLOB/' PATTERN ...
ug -g 'PATH/FILEGLOB' PATTERN ... ug -g '^PATH/FILEGLOB' PATTERN ...
ug -g 'PATH/DIRGLOB/' PATTERN ... ug -g '^PATH/DIRGLOB/' PATTERN ...
Incluya archivos para buscar por extensiones de nombre de archivo (sufijo) o excluyalos con ^
, una abreviatura de -g"*.EXT"
ug -O EXT PATTERN ... ug -O ^EXT PATTERN ...
Incluir archivos ocultos (dotfiles) y directorios para buscar (omitidos de forma predeterminada)
ug -. PATTERN ... ug -g'.*,.*/' PATTERN ...
especifique hidden
en su .ugrep para buscar siempre archivos ocultos con ug
.
Excluir archivos especificados por .gitignore, etc.
ug --ignore-files PATTERN ... ug --ignore-files=.ignore PATTERN ...
especifique ignore-files
en su .ugrep para ignorarlos siempre con ug
. Agregue ignore-files=...
adicionales según lo desee.
Patrones de búsqueda excluyendo patrones negativos ("coincide con esto pero no con aquello")
ug -e PATTERN -N NOTPATTERN ... ug -e '[0-9]+' -N 123 ...
Utilice patrones de expresiones regulares predefinidos para buscar código fuente, javascript, XML, JSON, HTML, PHP, rebajas, etc.
ug PATTERN -f c++/zap_comments -f c++/zap_strings ...
ug PATTERN -f php/zap_html ...
ug -f js/functions ... | ug PATTERN ...
Ordene los archivos coincidentes por nombre, mejor coincidencia, tamaño y hora
ug --sort PATTERN ... ug --sort=size PATTERN ...
ug --sort=changed PATTERN ... ug --sort=created PATTERN ...
ug -Z --sort=best PATTERN ... ug --no-sort PATTERN ...
Resultados de salida en formatos CSV, JSON, XML y especificados por el usuario
ug --csv PATTERN ... ug --json PATTERN ...
ug --xml PATTERN ... ug --format='file=%f line=%n match=%O%~' PATTERN ...
ug --help format
muestra ayuda sobre los campos %
de formato para una salida personalizada.
Busque con patrones de expresiones regulares compatibles con Perl de PCRE y muestre o reemplace coincidencias de subpatrones
ug -P PATTERN ... ug -P --format='%1 and %2%~' 'PATTERN(SUB1)(SUB2)' ...
Reemplace los patrones en la salida con -P y --replace el texto de reemplazo, que opcionalmente contiene campos de formato %
, usando -y
para pasar el resto del archivo:
ug --replace='TEXT' PATTERN ... ug -y --replace='TEXT' PATTERN ...
ug --replace='(%m:%o)' PATTERN ... ug -y --replace='(%m:%o)' PATTERN ...
ug -P --replace='%1' PATTERN ... ug -y -P --replace='%1' PATTERN ...
ug --help format
muestra ayuda sobre los campos de %
de formato para usar opcionalmente con --replace
.
Busque archivos con un formato de codificación específico como ISO-8859-1 a 16, CP 437, CP 850, MACROMAN, KOI8, etc.
ug --encoding=LATIN1 PATTERN ...
Instale el último ugrep con Homebrew:
$ brew install ugrep
o instalar con MacPorts:
$ sudo port install ugrep
Esto instala los comandos ugrep
y ug
, donde ug
es lo mismo que ugrep
pero también carga el archivo de configuración .ugrep cuando está presente en el directorio de trabajo o en el directorio de inicio.
Instalar con Winget winget install Genivia.ugrep
O instalar con Chocolatey choco install ugrep
O instalar con Scoop scoop install ugrep
O descargue el ejecutable ugrep.exe
con todas las funciones como artefacto de lanzamiento desde https://github.com/Genivia/ugrep/releases. La versión comprimida contiene el binario principal ugrep.exe
, así como ug.exe
. El comando ug
, diseñado para uso interactivo, carga y lee la configuración del archivo de configuración .ugrep
(cuando está presente en el directorio de trabajo o en el directorio de inicio).
Agregue ugrep.exe
y ug.exe
a su ruta de ejecución: vaya a Configuración y busque "Ruta" en Buscar una configuración . Seleccione variables de entorno -> Ruta -> Nuevo y agregue el directorio donde colocó los ejecutables ugrep.exe
y ug.exe
.
Consejo
Consejos prácticos sobre el uso ugrep.exe
y ug.exe
en la línea de comandos de Windows:
'
sino "
en su lugar; la mayoría de las utilidades de comandos de Windows consideran las comillas simples '
parte del argumento de la línea de comandos.-g/GLOB
en lugar de los argumentos habituales de la línea de comando GLOB
para seleccionar archivos y directorios para buscar, especialmente para búsquedas recursivas;""
para que coincida con todas las entradas, algunos intérpretes de comandos de Windows, como Powershell, pueden ignorarlo; en ese caso, debe especificar la opción --match
en su lugar;R
en lugar de n
para hacer coincidir cualquier nueva línea Unicode, como rn
pares y r
y n
individuales. $ apk add ugrep ugrep-doc
Consulte https://pkgs.alpinelinux.org/packages?name=ugrep para obtener información sobre la versión.
$ pacman -S ugrep
Consulte https://archlinux.org/packages/extra/x86_64/ugrep para obtener información sobre la versión.
Primero habilite el repositorio EPEL, luego podrá instalar ugrep.
$ dnf install ugrep
Consulte https://packages.fedoraproject.org/pkgs/ugrep/ugrep/ para obtener información sobre la versión.
$ apt-get install ugrep
Consulte https://packages.debian.org/ugrep para obtener información sobre la versión. Para compilar y probar ugrep
localmente, consulte los pasos de compilación "Todas las plataformas" más adelante.
$ dnf install ugrep
Consulte https://packages.fedoraproject.org/pkgs/ugrep/ugrep/ para obtener información sobre la versión.
$ pkg install ugrep
Consulte https://www.freshports.org/textproc/ugrep para obtener información sobre la versión.
$ pkgman install cmd:ugrep
Consulte https://github.com/haikuports/haikuports/tree/master/app-text/ugrep para obtener información sobre la versión. Para compilar y probar ugrep
localmente, consulte los pasos de compilación "Todas las plataformas" más adelante.
Puede utilizar el instalador de paquetes estándar de NetBSD (pkgsrc): http://cdn.netbsd.org/pub/pkgsrc/current/pkgsrc/textproc/ugrep/README.html
$ pkg_add ugrep
Consulte https://openports.pl/path/sysutils/ugrep para obtener información sobre la versión.
$ zypper install ugrep
Consulte https://build.opensuse.org/package/show/utilities/ugrep para obtener información sobre la versión.
Primero habilite el repositorio EPEL, luego podrá instalar ugrep.
$ dnf install ugrep
Consulte https://packages.fedoraproject.org/pkgs/ugrep/ugrep/ para obtener información sobre la versión.
Clonar ugrep
con
$ git clone https://github.com/Genivia/ugrep
O visite https://github.com/Genivia/ugrep/releases para descargar una versión específica.
Siempre puedes agregarlos más tarde, cuando necesites estas características:
La opción -P
(expresiones regulares de Perl) requiere la biblioteca PCRE2 (recomendada) o la biblioteca Boost.Regex (reserva opcional). Si PCRE2 no está instalado, instale PCRE2 con, por ejemplo, sudo apt-get install -y libpcre2-dev
o descargue PCRE2 y siga las instrucciones de instalación. Alternativamente, descargue Boost.Regex y ejecute ./bootstrap.sh
y sudo ./b2 --with-regex install
. Consulte Boost: cómo empezar.
La opción -z
(búsqueda de archivos comprimidos y archivos comprimidos) requiere la biblioteca zlib instalada. Está instalado en la mayoría de los sistemas. De lo contrario, instálelo, por ejemplo, con sudo apt-get install -y libz-dev
. Para buscar archivos .bz
y .bz2
, instale la biblioteca bzip2 (recomendado), por ejemplo, con sudo apt-get install -y libbz2-dev
. Para buscar archivos .lzma
y .xz
, instale la biblioteca lzma (recomendado), por ejemplo, con sudo apt-get install -y liblzma-dev
. Para buscar archivos .lz4
, instale la biblioteca lz4 (opcional, no requerida), por ejemplo, con sudo apt-get install -y liblz4-dev
. Para buscar archivos .zst
, instale la biblioteca zstd (opcional, no requerida), por ejemplo, con sudo apt-get install -y libzstd-dev
. Para buscar archivos .br
, instale la biblioteca brotli (opcional, no requerida), por ejemplo, con sudo apt-get install -y libbrotli-dev
. Para buscar archivos .bz3
, instale la biblioteca bzip3 (opcional, no requerida), por ejemplo, con sudo apt-get install -y bzip3
.
Consejo
Incluso si su sistema tiene utilidades de línea de comandos, como bzip2
, eso no significa necesariamente que las bibliotecas de desarrollo como libbz2
estén instaladas. Las bibliotecas de desarrollo deben estar instaladas.
Es posible que algunos sistemas Linux no estén configurados para cargar bibliotecas dinámicas desde /usr/local/lib
, lo que provoca un error de carga de biblioteca al ejecutar ugrep
. Para corregir esto, agregue export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib"
a su archivo ~/.bashrc
. O ejecute sudo ldconfig /usr/local/lib
.
Ejecute el script ./build.sh
para compilar ugrep
:
$ cd ugrep
$ ./build.sh
Esto construye el ejecutable ugrep
en el directorio ugrep/src
con ./configure
y make -j
, verificado con make test
. Cuando pasan todas las pruebas, el ejecutable ugrep
se copia a ugrep/bin/ugrep
y se agrega el enlace simbólico ugrep/bin/ug -> ugrep/bin/ugrep
para el comando ug
.
Tenga en cuenta que ug
es lo mismo que ugrep
pero también carga el archivo de configuración .ugrep cuando está presente en el directorio de trabajo o en el directorio de inicio. Esto significa que puede definir sus opciones predeterminadas para ug
en .ugrep.
Se pueden especificar rutas alternativas a las bibliotecas locales o instaladas con ./build.sh
. Para obtener ayuda sobre las opciones de compilación disponibles:
$ ./build.sh --help
Puede crear ejecutables estáticos especificando:
$ ./build.sh --enable-static
Esto puede fallar si las bibliotecas no se vinculan estáticamente, como brotli. En ese caso, intente ./build.sh --enable-static --without-brotli
.
Puede crear ugrep
con los valores predeterminados personalizados habilitados, como un buscapersonas:
$ ./build.sh --enable-pager
Las opciones para seleccionar valores predeterminados para compilaciones incluyen:
--help
a mostrar opciones de compilación--enable-static
construye ejecutables estáticos, si es posible--enable-hidden
siempre busca archivos y directorios ocultos--enable-pager
siempre usa un buscapersonas para mostrar la salida en los terminales--enable-pretty
la salida a terminales y agregar encabezados de nombre de archivo--disable-auto-color
deshabilita los colores automáticos, requiere la opción ugrep --color=auto
para mostrar colores--disable-mmap
deshabilita los archivos mapeados en memoria--disable-sse2
desactiva las optimizaciones SSE2 y AVX--disable-avx2
desactiva las optimizaciones AVX2 y AVX512BW, pero compila con SSE2 cuando sea compatible--disable-neon
desactiva las optimizaciones ARM NEON/AArch64--with-grep-path
la ruta -f
predeterminada si GREP_PATH
no está definido--with-grep-colors
los colores predeterminados si GREP_COLORS
no está definido Una vez completada la compilación, copie ugrep/bin/ugrep
y ugrep/bin/ug
en una ubicación conveniente, por ejemplo en su directorio ~/bin
. O, si desea instalar los comandos y las páginas de manual ugrep
y ug
:
$ sudo make install
Esto también instala los archivos de patrones con patrones predefinidos para la opción -f
en /usr/local/share/ugrep/patterns/
. La opción -f
primero verifica el directorio de trabajo para detectar la presencia de archivos de patrón; si no se encuentran, verifica la variable de entorno GREP_PATH
para cargar los archivos de patrón y, si no se encuentran, lee los archivos de patrón predefinidos instalados.
Desafortunadamente, los clones de git no conservan las marcas de tiempo, lo que significa que puede encontrarse con "ADVERTENCIA: falta 'aclocal-1.15' en su sistema". o que no se encontró el encabezado automático al ejecutar make
.
Para solucionar este problema, ejecute:
$ autoreconf -fi
$ ./build.sh
GCC 8 y versiones posteriores pueden producir advertencias del tipo "nota: paso de parámetro para argumento... cambiado en GCC 7.1" . Estas advertencias deben ignorarse.
Se incluye un Dockerfile para compilar ugrep
en un contenedor de Ubuntu.
Es posible que los desarrolladores deseen utilizar desinfectantes para verificar el código ugrep al realizar cambios significativos, por ejemplo, para detectar carreras de datos con ThreadSanitizer:
$ ./build.sh CXXFLAGS='-fsanitize=thread -O1 -g'
Verificamos ugrep
con clang AddressSanitizer, MemorySanitizer, ThreadSanitizer y UndefinedBehaviorSanitizer. Estas opciones generan una sobrecarga de tiempo de ejecución significativa y no deben usarse para la compilación final.
? Volver a la tabla de contenidos
Tenga en cuenta que los comandos ugrep y ug buscan archivos binarios de forma predeterminada y no ignoran los archivos especificados .gitignore, lo que no hará que las comparaciones de rendimiento de búsqueda recursiva sean significativas a menos que se utilicen las opciones -I
y --ignore-files
. Para que estas opciones sean las predeterminadas para ug , simplemente agregue ignore-binary
e ignore-files
a su archivo de configuración .ugrep.
Para obtener una comparación de rendimiento actualizada de la última versión de ugrep, consulte los puntos de referencia de rendimiento de ugrep. Ugrep es más rápido que GNU grep, Silver Searcher, ack, sift. La velocidad de Ugrep supera a ripgrep en la mayoría de los puntos de referencia.
Primero, definamos el comando :grep
en Vim para buscar archivos de forma recursiva. Para hacerlo, agregue las siguientes líneas a su .vimrc
ubicado en el directorio raíz:
if executable('ugrep')
set grepprg=ugrep -RInk -j -u --tabs=1 --ignore-files
set grepformat=%f:%l:%c:%m,%f+%l+%c+%m,%-G%f\|%l\|%c\|%m
endif
Esto especifica -j
búsquedas que no distinguen entre mayúsculas y minúsculas con el comando Vim :grep
. Para búsquedas que distingan entre mayúsculas y minúsculas, elimine -j
de grepprg
. Varias coincidencias en la misma línea se enumeran por separado en la ventana de corrección rápida. Si no lo desea, elimine -u
de grepprg
. Con este cambio, solo se muestra la primera coincidencia de una línea. La opción --ignore-files
omite los archivos especificados en los archivos .gitignore
, cuando están presentes. Para limitar la profundidad de las búsquedas recursivas solo al directorio actual, agregue -1
a grepprg
.
Ahora puede invocar el comando Vim :grep
en Vim para buscar archivos en una PATH
especificada para coincidencias PATTERN
:
:grep PATTERN [PATH]
Si omite PATH
, se busca en el directorio de trabajo. Utilice %
como PATH
para buscar solo el archivo abierto actualmente en Vim:
:grep PATTERN %
El comando :grep
muestra los resultados en una ventana de corrección rápida que le permite saltar rápidamente a las coincidencias encontradas.
Para abrir una ventana de corrección rápida con la lista más reciente de coincidencias:
:copen
Haga doble clic en una línea en esta ventana (o seleccione una línea y presione ENTRAR) para saltar al archivo y la ubicación en el archivo de la coincidencia. Ingrese los comandos :cn
y :cp
para saltar a la coincidencia anterior o siguiente, respectivamente. Para actualizar los resultados de la búsqueda en la ventana de corrección rápida, simplemente búsquelos. Por ejemplo, para buscar recursivamente el código fuente C++ marcado como FIXME
en el directorio de trabajo:
:grep -tc++ FIXME
Para cerrar la ventana de corrección rápida:
:cclose
Puede usar las opciones de ugrep con el comando :grep
, por ejemplo, para seleccionar comentarios de una o varias líneas en el archivo actual:
:grep -f c++/comments %
Para ahorrar espacio, solo se muestra la primera línea de un comentario de varias líneas en Quickfix. Para mostrar todas las líneas de una coincidencia de varias líneas, elimine %-G
de grepformat
.
Una herramienta Vim popular es ctrlp.vim, que se instala con:
$ cd ~/.vim
$ git clone https://github.com/kien/ctrlp.vim.git bundle/ctrlp.vim
CtrlP usa ugrep agregando las siguientes líneas a su .vimrc
:
if executable('ugrep')
set runtimepath^=~/.vim/bundle/ctrlp.vim
let g:ctrlp_match_window='bottom,order:ttb'
let g:ctrlp_user_command='ugrep "" %s -Rl -I --ignore-files -3'
endif
donde -I
omite los archivos binarios, la opción --ignore-files
omite los archivos especificados en los archivos .gitignore
, cuando están presentes, y la opción -3
restringe la búsqueda de directorios a tres niveles (el directorio de trabajo y hasta dos niveles inferiores).
Inicie Vim y luego ingrese el comando:
:helptags ~/.vim/bundle/ctrlp.vim/doc
Para ver la documentación de CtrlP en Vim, ingrese el comando:
:help ctrlp.txt
? Volver a la tabla de contenidos
Gracias a Manuel Uberti, ahora puedes usar ugrep en Emacs. Para usar ugrep en lugar de GNU grep dentro de Emacs, agregue la siguiente línea a su archivo .emacs.d/init.el
:
(setq-default xref-search-program ‘ugrep)
Esto significa que los comandos de Emacs como project-find-regexp
que dependen de Xref ahora pueden aprovechar el poder de ugrep .
Además, es posible utilizar grep
en los comandos grep de Emacs. Por ejemplo, puedes ejecutar lgrep
con ugrep
personalizando grep-template
con algo como lo siguiente:
(setq-default grep-template "ugrep --color=always -0Iinr -e <R>")
Si no tiene la versión 29 (o superior) de Emacs, puede descargar y compilar Emacs desde la rama maestra de Emacs o habilitar la integración de Xref con ugrep manualmente:
(with-eval-after-load 'xref
(push '(ugrep . "xargs -0 ugrep <C> --null -ns -e <R>")
xref-search-program-alist)
(setq-default xref-search-program 'ugrep))
? Volver a la tabla de contenidos
Ugrep listo para usar admite todas las opciones de línea de comandos grep estándar de GNU/BSD y también mejora muchas de ellas. Para obtener más información, consulte las mejoras notables con respecto a grep.
Si desea ceñirse exactamente a los patrones Unicode no UTF de GNU/BSD grep ASCII/LATIN1, use la opción -U
para deshabilitar la coincidencia completa de patrones Unicode.
De hecho, ejecutar ugrep
con las opciones -U
, -Y
, -.
y --sort
hace que se comporte exactamente como egrep
, haciendo coincidir solo patrones Unicode ASCII/LATIN1 no UTF, permitiendo que patrones vacíos coincidan y busquen archivos ocultos en lugar de ignorarlos, respectivamente. Ver equivalencia grep.
Puede crear alias grep convenientes con o sin opciones -U
, -Y
, -.
y --sort
o incluir otras opciones según se desee.
O puede crear ejecutables grep
, egrep
y fgrep
copiando ugrep
con esos nombres. Cuando el ejecutable ugrep
(o ugrep.exe
) se copia como grep
( grep.exe
), egrep
( egrep.exe
), fgrep
( fgrep.exe
), luego las opciones -U
, -Y
y -.
se habilitan automáticamente junto con -G
para grep
, -E
para egrep
y -F
para fgrep
. Además, cuando se copia como zgrep
, zegrep
y zfgrep
, la opción -z
está habilitada. Por ejemplo, cuando ugrep
se copia como zegrep
, las opciones -z
, -E
, -Y
, -.
y --sort
están habilitados.
Del mismo modo, los enlaces simbólicos y físicos a ugrep
también funcionan bien para crear reemplazos grep
, egrep
y fgrep
. Por ejemplo, para crear un enlace simbólico egrep
:
sudo ln -s `which ugrep` /opt/local/bin/egrep
El /opt/local/bin
es solo un ejemplo y puede o no estar en su $path
y puede encontrarse o no al ejecutar egrep
dependiendo de su $path
.
ugrep es equivalente a grep GNU/BSD cuando se utilizan las siguientes opciones:
grep = ugrep -G -U -Y -. --sort -Dread -dread
egrep = ugrep -E -U -Y -. --sort -Dread -dread
fgrep = ugrep -F -U -Y -. --sort -Dread -dread
zgrep = ugrep -z -G -U -Y -. --sort -Dread -dread
zegrep = ugrep -z -E -U -Y -. --sort -Dread -dread
zfgrep = ugrep -z -F -U -Y -. --sort -Dread -dread
dónde:
-U
deshabilita la coincidencia de patrones Unicode de caracteres anchos, por lo que, por ejemplo, el patrón xa3
coincide con el byte A3 en lugar del punto de código Unicode U+00A3 representado por la secuencia UTF-8 C2 A3. De forma predeterminada en ugrep, xa3
coincide con U+00A3. No recomendamos usar -U
para búsquedas de patrones de texto, solo para búsquedas binarias o para buscar archivos latin-1 (iso-8859-1) sin informar estos archivos como binarios (desde ugrep v3.5.0).-Y
habilita coincidencias vacías, por lo que, por ejemplo, el patrón a*
coincide con cada línea en lugar de una secuencia de a
. De forma predeterminada en ugrep, el patrón a*
coincide con una secuencia de a
. Además, en ugrep el patrón a*b*c*
coincide con lo que se supone que debe coincidir de forma predeterminada. Ver mejoras.-.
busca archivos ocultos (archivos de puntos). De forma predeterminada, los archivos ocultos se ignoran, como la mayoría de las utilidades de Unix.--sort
especifica la salida ordenada por nombre de ruta, mostrando primero los archivos coincidentes ordenados seguidos de coincidencias recursivas ordenadas en los subdirectorios. De lo contrario, los archivos coincidentes se informan sin ningún orden en particular para mejorar el rendimiento;-Dread
y -dread
son los valores predeterminados de GNU/BSD grep pero no se recomiendan; consulte las mejoras para obtener una explicación.? Volver a la tabla de contenidos
Alias comúnmente utilizados para agregar a .bashrc
para aumentar la productividad:
alias uq = 'ug -Q' # interactive TUI search (uses .ugrep config)
alias uz = 'ug -z' # compressed files and archives search (uses .ugrep config)
alias ux = 'ug -U --hexdump' # binary pattern search (uses .ugrep config)
alias ugit = 'ug -R --ignore-files' # works like git-grep & define your preferences in .ugrep config
alias grep = 'ug -G' # search with basic regular expressions (BRE) like grep
alias egrep = 'ug -E' # search with extended regular expressions (ERE) like egrep
alias fgrep = 'ug -F' # find string(s) like fgrep
alias zgrep = 'ug -zG' # search compressed files and archives with BRE
alias zegrep = 'ug -zE' # search compressed files and archives with ERE
alias zfgrep = 'ug -zF' # find string(s) in compressed files and/or archives
alias xdump = 'ugrep -X ""' # hexdump files without searching (don't use .ugrep config)
alias zmore = 'ugrep+ -z -I -+ --pager ""' # view compressed, archived and regular files (don't use .ugrep config)
? Volver a la tabla de contenidos
-Q
.n
.-U
).--bool
).--ignore-files
.-Z
.-z
.-z
.-z
y --zmax=NUM
hasta NUM
niveles de profundidad.--filter
utilizando utilidades de conversión de formatos de terceros como complementos.-r
para buscar directorios de forma recursiva.-.
).-E
como egrep, mientras que -G
habilita BRE).-J1
).-W
(genera coincidencias binarias en hexadecimal con coincidencias de texto como de costumbre) y -X
(genera todas las coincidencias en hexadecimal).--format
).-f
usa la variable de entorno GREP_PATH
o los patrones predefinidos instalados en /usr/local/share/ugrep/patterns
. Si se especifica -f
y también se especifican uno o más patrones -e
, las opciones -F
, -x
y -w
no se aplican a los patrones -f
. Esto es para evitar confusiones cuando -f
se usa con patrones predefinidos que tal vez ya no funcionen correctamente con estas opciones.-O
, -M
y -t
especifican extensiones de archivo, patrones de bytes mágicos de firma de archivo y tipos de archivo predefinidos, respectivamente. Esto permite buscar ciertos tipos de archivos en árboles de directorios, por ejemplo con las opciones de búsqueda recursivas -R
y -r
. Las opciones -O
, -M
y -t
también se aplican a archivos archivados en archivos cpio, jar, pax, tar, zip y 7z.-k
, --column-number
para mostrar el número de columna, teniendo en cuenta el espacio entre tabulaciones al expandir las pestañas, como se especifica en la opción --tabs
.-P
(expresiones regulares de Perl) admite referencias inversas (con --format
) y búsquedas atrás, que utiliza la biblioteca PCRE2 o Boost.Regex para una rápida coincidencia de expresiones regulares de Perl con una sintaxis similar a PCRE.-b
con la opción -o
o con la opción -u
, ugrep muestra el desplazamiento de bytes exacto de la coincidencia del patrón en lugar del desplazamiento de bytes del inicio de la línea coincidente informada por GNU/BSD grep.-u
, --ungroup
para no agrupar varias coincidencias por línea. Esta opción muestra nuevamente una línea de entrada coincidente para cada coincidencia de patrón adicional en la línea. Esta opción es particularmente útil con la opción -c
para informar el número total de coincidencias de patrones por archivo en lugar del número de líneas coincidentes por archivo.-Y
permite hacer coincidir patrones vacíos. Hacer grep con patrones de coincidencias vacías es extraño y da resultados diferentes con GNU grep versus BSD grep. Ugrep no genera coincidencias vacías de forma predeterminada, lo que evita cometer errores que pueden producir resultados "aleatorios". Por ejemplo, con GNU/BSD grep, el patrón a*
coincide con cada línea de la entrada y, de hecho, coincide con xyz
tres veces (las transiciones vacías antes y entre x
, y
y z
). Permitir coincidencias vacías requiere la opción ugrep -Y
. Los patrones que comienzan con ^
o terminan con $
, como ^h*$
, coinciden con espacios vacíos. Estos patrones habilitan automáticamente la opción -Y
.-D, --devices=ACTION
se skip
de forma predeterminada, en lugar de read
. Esto evita que se bloqueen inesperadamente canalizaciones con nombre en directorios que se buscan recursivamente, como puede suceder con GNU/BSD grep que read
dispositivos de forma predeterminada.-d, --directories=ACTION
se skip
de forma predeterminada, en lugar de read
. De forma predeterminada, se buscan los directorios especificados en la línea de comando, pero no de forma recursiva en los subdirectorios.-N PATTERN
, que son patrones de la forma (?^X)
que omiten todas las entradas X
, eliminando así X
de la búsqueda. Por ejemplo, se pueden utilizar patrones negativos para omitir cadenas y comentarios al buscar identificadores en el código fuente y encontrar coincidencias que no están en cadenas y comentarios. Los patrones zap
predefinidos usan patrones negativos; por ejemplo, use -f cpp/zap_comments
para ignorar las coincidencias de patrones en los comentarios de C++.GREP_OPTIONS
, porque el comportamiento de ugrep debe ser portátil y predecible en todos los sistemas. También GNU grep abandonó GREP_OPTIONS
por este motivo. Utilice el comando ug
que carga el archivo de configuración .ugrep ubicado en el directorio de trabajo o en el directorio de inicio cuando esté presente, o utilice alias de shell para crear nuevos comandos con opciones de búsqueda específicas.? Volver a la tabla de contenidos
Para realizar una búsqueda utilizando un archivo de configuración .ugrep
colocado en el directorio de trabajo o en el directorio de inicio (tenga en cuenta que ug
es lo mismo que ugrep --config
):
ug PATTERN FILE...
Para guardar un archivo de configuración .ugrep
en el directorio de trabajo, edite este archivo en su directorio de inicio para personalizar sus preferencias para los valores predeterminados ug
:
ug --save-config
Para buscar main
en el directorio de trabajo y de forma recursiva más profunda (tenga en cuenta que -r
enlaces simbólicos recursivos está habilitado de forma predeterminada si no se especifican argumentos de archivo):
ug main
Lo mismo, pero solo busca archivos de código fuente C++ de forma recursiva, ignorando todos los demás archivos:
ug -tc++ main
Lo mismo, usando la consulta interactiva TUI, comenzando con el patrón de búsqueda inicial main
(tenga en cuenta que -Q
con un patrón inicial requiere la opción -e
porque los patrones normalmente se especifican de forma interactiva y todos los argumentos de la línea de comando se consideran archivos/directorios):
ug -Q -tc++ -e main
Para buscar #define
(y # define
etc.) usando un patrón de expresiones regulares en archivos C++ (tenga en cuenta que los patrones deben citarse para evitar que el shell incluya *
y ?
):
ug -tc++ '#[t ]*define'
Para buscar main
como palabra ( -w
) de forma recursiva sin seguir enlaces simbólicos ( -r
) en el directorio myproject
, mostrando los números de línea ( -n
) y columna ( -k
) coincidentes junto a las líneas coincidentes:
ug -r -nkw main myproject
Lo mismo, pero solo busca myproject
sin recurrir más profundamente (tenga en cuenta que los argumentos del directorio se buscan en un nivel de forma predeterminada):
ug -nkw main myproject
Lo mismo, pero busque myproject
y un nivel de subdirectorio más profundo (dos niveles) con -2
:
ug -2 -nkw main myproject
Lo mismo, pero solo busca archivos C++ en myproject
y sus subdirectorios con -tc++
:
ug -tc++ -2 -nkw main myproject
Lo mismo, pero también busca dentro de archivos (por ejemplo, archivos zip y tar) y archivos comprimidos con -z
:
ug -z -tc++ -2 -nkw main myproject
Busque recursivamente main
en el directorio de trabajo mientras ignora los archivos ignorados por git (por ejemplo, asumiendo que .gitignore
está en el directorio de trabajo o debajo):
ug --ignore-files -tc++ -nkw main
Para enumerar todos los archivos en el directorio de trabajo y en niveles más profundos que no son ignorados por los archivos .gitignore
:
ug --ignore-files -l ''
Para mostrar la lista de extensiones de nombre de archivo y "bytes mágicos" (shebangs) que se buscan correspondientes a los argumentos -t
:
ug -tlist
Para enumerar todos los archivos de shell de forma recursiva, según las extensiones y los shebangs con -l
(tenga en cuenta que ''
coincide con cualquier archivo que no esté vacío):
ug -l -tShell ''
? Volver a la tabla de contenidos
Para buscar main
en el código fuente mientras se ignoran cadenas y bloques de comentarios, puede usar patrones negativos con la opción -N
para omitir coincidencias no deseadas en cadenas entre comillas y bloques de comentarios de C/C++:
ug -r -nkw -e 'main' -N '"(\.|\r?n|[^\n"])*"|//.*|/*(.*n)*?.**+/' myproject
¡Es mucho trabajo escribirlo correctamente! Si eres como yo, no quiero perder tiempo jugueteando con patrones de expresiones regulares cuando estoy trabajando en algo más importante. Hay una manera más fácil utilizando los patrones predefinidos de UGREP ( -f
) que se instalan con la herramienta ugrep
:
ug -r -nkw 'main' -f c/zap_strings -f c/zap_comments myproject
Esta consulta también busca otros archivos del código fuente C/C ++, como Readmes, Makefiles, etc. También nos saltamos los enlaces simbólicos con -r
. Entonces, refinemos esta consulta seleccionando archivos C/C ++ solo usando opción -tc,c++
e incluir enlaces de simulación a archivos y directorios con -R
:
ug -R -tc,c++ -nkw 'main' -f c/zap_strings -f c/zap_comments myproject
¿Qué pasa si solo desea buscar el identificador main
pero no como una función main(
? En este caso, use un patrón negativo para que esto se saltea mainh*(
coincidencias de patrones:
ug -R -tc,c++ -nkw -e 'main' -N 'mainh*(' -f c/zap_strings -f c/zap_comments myproject
Esto utiliza las opciones -e
y -N
para especificar explícitamente un patrón y un patrón negativo, respectivamente, que esencialmente está formando el patrón main|(?^mainh*()
, donde h
coincide con el espacio y la pestaña en general. Los patrones negativos son útiles para filtrar coincidencias de patrones que no nos interesa.
Como otro ejemplo, supongamos que podemos buscar la palabra FIXME
en bloques de comentarios c/c ++. Para hacerlo, primero podemos seleccionar los bloques de comentarios con el patrón de c/comments
predefinidos de UGREP y luego seleccionar líneas con FIXME
usando una tubería:
ug -R -tc,c++ -nk -f c/comments myproject | ug -w 'FIXME'
Filtrar los resultados con las tuberías es generalmente más fácil que usar y o la lógica o la lógica que usan algunas herramientas de búsqueda. Este enfoque sigue el espíritu Unix para mantener los servicios públicos simples y usarlas en combinación para tareas más complejas.
Produciremos una lista ordenada de todos los identificadores que se encuentran en el código fuente de Java mientras se omite las cuerdas y los comentarios:
ug -R -tjava -f java/names myproject | sort -u
Esto coincide con los identificadores de Java Unicode utilizando el Regex p{JavaIdentifierStart}p{JavaIdentifierPart}*
definido en patterns/java/names
.
Con GREP tradicionales y herramientas similares a GREP, se necesita un gran esfuerzo para buscar recursivamente el archivo fuente de C/C ++ que define la función qsort
, que requiere algo como esto:
ug -R --include='*.c' --include='*.cpp' '^([ t]*[[:word:]:*&]+)+[ t]+qsort[ t]*([^;n]+$' myproject
Afortunadamente, con UGREP podemos simplemente seleccionar todas las definiciones de funciones en archivos con extensión .c
o .cpp
utilizando opción -Oc,cpp
y utilizando un functions
predefinido que se instala con la herramienta para producir todas las definiciones de funciones. Luego seleccionamos el que queremos:
ug -R -Oc,cpp -nk -f c/functions | ug 'qsort'
Tenga en cuenta que podríamos haber usado -tc,c++
para seleccionar archivos C/C ++, pero esto también incluye archivos de encabezado cuando solo queremos buscar archivos .c
y .cpp
.
También podemos omitir archivos y directorios de que se busque que se definan en .gitignore
. Para hacerlo, usamos --ignore-files
para excluir cualquier archivo y directorios de búsquedas recursivas que coincidan con los globos en .gitignore
, cuando se encuentran uno o más archivos .gitignore
:
ug -R -tc++ --ignore-files -f c++/defines
Esto busca archivos C ++ ( -tc++
) en el directorio de trabajo para #define
Lines ( -f c++/defines
), mientras se omite archivos y directorios declarados en .gitignore
. Si encuentra esto demasiado largo para escribir, defina un alias para buscar directorios de GitHub:
alias ugit='ugrep -R --ignore-files'
ugit -tc++ -f c++/defines
Para resaltar las coincidencias cuando se empujamos a través de una cadena de tuberías que deberíamos usar --color=always
:
ugit --color=always -tc++ -f c++/defines | ugrep -w 'FOO.*'
Esto devuelve una lista iluminada de color de todos #define FOO...
macros en archivos de código fuente C/C ++, omitiendo archivos definidos en .gitignore
.
Tenga en cuenta que el complemento de --exclude
no es --include
, porque las exclusiones siempre tienen prioridad sobre las inclusiones, por lo que no podemos enumerar de manera confiable los archivos que se ignoran con --include-from='.gitignore'
. Solo se visitan los archivos explícitamente especificados con --include
y directorios explícitamente especificados con --include-dir
. El --include-from
de las listas de globos que se consideran archivos y directorios para agregar a --include
y --include-dir
, respectivamente. Esto significa que cuando los nombres de los directores y las rutas de directorio no se enumeran explícitamente en este archivo, no se visitará usando --include-from
.
Debido a que UGREP verifica si la entrada es válida unicode codificada con UTF (a menos que se use -U
), es posible usarla como un filtro para ignorar la salida no UTF producida por un programa:
program | ugrep -I ''
Si el programa produce una salida válida, la salida se pasa, de lo contrario, la salida se filtra opción -I
. Si la salida es inicialmente válida para una porción muy grande, pero es seguido por una salida no válida, entonces UGREP puede mostrar inicialmente la salida hasta pero excluyendo la salida no válida después de la cual se bloquea una salida adicional.
Para filtrar líneas que están codificadas por ASCII o UTF, al tiempo que eliminan líneas que no son:
program | ugrep '[p{Unicode}--[n]]+'
Tenga en cuenta que p{Unicode}
coincide n
¡pero no queremos coincidir con todo el archivo! Solo líneas con [p{Unicode}--[n]]+
.
? Volver a la tabla de contenido
La página del hombre de Ugrep:
man ugrep
Para mostrar una página de ayuda:
ug --help
Para mostrar opciones que mencionan WHAT
:
ug --help WHAT
Para mostrar una lista de valores de opción de -t TYPES
:
ug -tlist
En la consulta interactiva TUI, presione F1 o CTRL-Z para obtener ayuda y opciones:
ug -Q
? Volver a la tabla de contenido
--config[=FILE], ---[FILE]
Use configuration FILE. The default FILE is `.ugrep'. The working
directory is checked first for FILE, then the home directory. The
options specified in the configuration FILE are parsed first,
followed by the remaining options specified on the command line.
The ug command automatically loads a `.ugrep' configuration file,
unless --config=FILE or --no-config is specified.
--no-config
Do not load the default .ugrep configuration file.
--save-config[=FILE] [OPTIONS]
Save configuration FILE to include OPTIONS. Update FILE when
first loaded with --config=FILE. The default FILE is `.ugrep',
which is automatically loaded by the ug command. When FILE is a
`-', writes the configuration to standard output. Only part of the
OPTIONS are saved that do not cause searches to fail when combined
with other options. Additional options may be specified by editing
the saved configuration file. A configuration file may be modified
manually to specify one or more config[=FILE] to indirectly load
the specified FILEs, but recursive config loading is not allowed.
El comando ug
está destinado a la búsqueda interactiva dependiente del contexto y es equivalente al comando ugrep --config
para cargar el archivo de configuración .ugrep
cuando está presente en el directorio de trabajo o, cuando no se encuentra, en el directorio de inicio:
ug PATTERN ...
ugrep --config PATTERN ...
El comando ug
también clasifica los archivos por nombre por directorio buscado. Un archivo de configuración contiene NAME=VALUE
por línea, donde NAME
es el nombre de una opción larga (sin --
) y =VALUE
es un argumento, que es opcional y puede omitirse dependiendo de la opción. Se ignoran las líneas y líneas vacías que comienzan con un #
:
# Color scheme
colors=cx=hb:ms=hiy:mc=hic:fn=hi+y+K:ln=hg:cn=hg:bn=hg:se=
# Disable searching hidden files and directories
no-hidden
# ignore files specified in .ignore and .gitignore in recursive searches
ignore-files=.ignore
ignore-files=.gitignore
Las opciones de línea de comandos se analizan en el siguiente orden: primero se carga el archivo de configuración (predeterminado o nombrado), luego se analizan las opciones y argumentos restantes en la línea de comando.
Opción: --stats
muestra el archivo de configuración utilizado después de buscar.
Los archivos de configuración nombrados están destinados a optimizar las tareas de búsqueda personalizadas, reduciendo el número de opciones de línea de comando a solo uno ---FILE
para usar la recopilación de opciones especificadas en FILE
. La opción --config=FILE
y su formulario abreviado ---FILE
Cargue el archivo de configuración especificado ubicado en el directorio de trabajo o, cuando no se encuentra, ubicado en el directorio de inicio:
ug ---FILE PATTERN ...
ugrep ---FILE PATTERN ...
Se produce un error cuando FILE
no se encuentra o no se puede leer.
Los archivos de configuración nombrados se pueden usar para definir una colección de opciones que son específicas de los requisitos de una tarea en el flujo de trabajo de desarrollo de un proyecto. Por ejemplo, para informar problemas no resueltos controlando el código fuente y la documentación de los comentarios con los elementos FixMe y TODO. Tal archivo de configuración con nombre se puede localizar en un proyecto colocándolo en el directorio del proyecto, o se puede hacer global colocándolo en el directorio de inicio. Para la retroalimentación visual, se puede especificar un esquema de color específico para esta tarea con colors
de opción en el FILE
de configuración para ayudar a identificar la salida producida por una configuración con nombre en lugar de la configuración predeterminada.
La opción --save-config
guarda un archivo de configuración .ugrep
en el directorio de trabajo utilizando la configuración actual cargada con --config
. Esto guarda la configuración actual combinada con opciones adicionales cuando también se especifica. Solo aquellas opciones que no pueden entrar en conflicto con otras opciones y opciones que no pueden afectar negativamente los resultados de búsqueda se guardarán.
La opción --save-config=FILE
guarda la configuración en el FILE
especificado. La configuración se escribe en salida estándar cuando FILE
es a -
.
Alternativamente, un archivo de configuración puede ser creado o modificado manualmente. Un archivo de configuración puede incluir una o más config[=FILE]
para cargar indirectamente el FILE
especfificado, pero la carga de configuración recursiva está prohibida. La forma más sencilla de crear un archivo de configuración es especificar config
en la parte superior del archivo, seguido de las largas opciones para anular los valores predeterminados.
? Volver a la tabla de contenido
-Q[=DELAY], --query[=DELAY]
Query mode: start a TUI to perform interactive searches. This mode
requires an ANSI capable terminal. An optional DELAY argument may
be specified to reduce or increase the response time to execute
searches after the last key press, in increments of 100ms, where
the default is 3 (300ms delay). No whitespace may be given between
-Q and its argument DELAY. Initial patterns may be specified with
-e PATTERN, i.e. a PATTERN argument requires option -e. Press F1
or CTRL-Z to view the help screen. Press F2 or CTRL-Y to invoke a
command to view or edit the file shown at the top of the screen.
The command can be specified with option --view, or defaults to
environment variable PAGER when defined, or EDITOR. Press Tab and
Shift-Tab to navigate directories and to select a file to search.
Press Enter to select lines to output. Press ALT-l for option -l
to list files, ALT-n for -n, etc. Non-option commands include
ALT-] to increase context. See also options --no-confirm, --delay,
--split and --view.
--no-confirm
Do not confirm actions in -Q query TUI. The default is confirm.
--delay=DELAY
Set the default -Q key response delay. Default is 3 for 300ms.
--split
Split the -Q query TUI screen on startup.
--view[=COMMAND]
Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y.
Esta opción inicia una interfaz de usuario para ingresar patrones de búsqueda de manera interactiva:
-c
para contar las coincidencias. Presionando alt -c nuevamente deshabilita -c
. Las opciones se pueden alternar con la tecla ALT mientras se busca o al ver la pantalla de ayuda. Si no se admiten Alt/Meta Keys (por ejemplo, x11 xterm), presione CTRL-O seguido de la tecla correspondiente a la opción.-g
y las globas de coincidencia de directorio, una lista separada por comas de patrones de globas de estilo Gitignore. Presionar ESC devuelve el control a la solicitud del patrón de consulta (se guardan los globos). Cuando un globo es precedido por A !
o a ^
, omita los archivos cuyo nombre coincide con el globo cuando un globo contiene A /
, los nombres de ruta completos coinciden. De lo contrario, los nombres de base se combinan. Cuando un globo termina con A /
, los directorios coinciden.Q>
(normal), F>
(cadenas fijas), G>
(regex básica), P>
(coincidencia de perl) y Z>
(coincidencia difusa). Cuando se muestra el --glob=
Avecute, se puede ingresar una lista separada por comas de patrones de globas de estilo Gitignore. Presionar ESC devuelve el control al indicador del patrón.--view
.--view=COMMAND
. De lo contrario, las variables de entorno PAGER
o EDITOR
se utilizan para invocar el comando con CTRL-Y. Los nombres de archivo deben estar habilitados y visibles en la salida para usar esta función.--color
.DELAY
bajo como 1. Sin embargo, los valores más bajos pueden aumentar la carga del sistema como resultado de iniciar y cancelar repetidamente las búsquedas por cada tecla presionada.--heading
está habilitada de forma predeterminada. Presione Alt-+ para apagar los encabezados.Consulta TUI Mapeo de teclas:
llaves) | función |
---|---|
Alt-key | alternar la opción de línea de comandos UGREP correspondiente a key |
Alt-/ xxxx / | Insertar el punto de código HEX UNICODE U+xxxx |
Esc Ctrl-C | Volver o salir |
Ctrl-Q | Salida rápida y salida Los resultados seleccionados en el modo de selección |
Tab | CHDIR al directorio del archivo que se muestra en la parte superior de la pantalla o seleccione el archivo |
Shift-Tab | Chdir un nivel de nivel o deseleccionar |
Enter | Ingrese el modo de selección y altere las líneas seleccionadas para salir al salir |
Up Ctrl-P | subir |
Down Ctrl-N | bajar |
Ctrl-B Left | moverse a la izquierda |
Ctrl-F Right | moverse a la derecha |
PgUp Ctrl-G | Mover la pantalla por una página |
PgDn Ctrl-D | Mover la pantalla hacia abajo por una página |
Alt-Up | Mueva la visualización por 1/2 página ( Shift-Up macOS) |
Alt-Down | Mueva la pantalla hacia abajo por 1/2 página (MacOS Shift-Down ) |
Alt-Left | Mueva la pantalla izquierda por 1/2 página (macOS Shift-Left ) |
Alt-Right | Mueva la pantalla directamente por 1/2 página (MacOS Shift-Right ) |
Home Ctrl-A | Mover el cursor al comienzo de la línea |
End Ctrl-E | Mueva el cursor al final de la línea |
Ctrl-K | Eliminar después del cursor |
Ctrl-L | pantalla de actualización |
Ctrl-O + key | Termine la opción de línea de comandos UGREP correspondiente a key , igual que Alt-key |
Ctrl-R F4 | saltar al marcador |
Ctrl-S | Saltar al siguiente dir/archivo/contexto |
Ctrl-T F5 | Pantalla dividida de toggle ( --split inicia un TUI de pantalla dividida) |
Ctrl-U | Eliminar antes del cursor |
Ctrl-V | carácter literal |
Ctrl-W | Sube a un dir/archivo/contexto |
Ctrl-X F3 | Establecer marcador |
Ctrl-Y F2 | Ver o editar el archivo que se muestra en la parte superior de la pantalla |
Ctrl-Z F1 | Ver ayuda y opciones |
Ctrl-^ | Chdir de vuelta al directorio de trabajo inicial |
Ctrl-] | alternar color/mono |
Ctrl- | proceso final |
Para buscar interactivamente los archivos en el directorio de trabajo y a continuación:
ug -Q
Lo mismo, pero restringido solo a archivos C ++ e ignorando los archivos .gitignore
:
ug -Q -tc++ --ignore-files
Para buscar interactivamente todos los muelles en el directorio de trabajo y a continuación:
ug -Q -g 'Makefile*' -g 'makefile*'
Lo mismo, pero para hasta 2 niveles de directorio (trabajo y un nivel de subdirectorio):
ug -Q -2 -g 'Makefile*' -g 'makefile*'
Para ver interactivamente el contenido de main.cpp
y buscarlo, donde -y
muestra cualquier línea no coincidente como contexto:
ug -Q -y main.cpp
Para buscar interactivamente main.cpp
, comenzando con el patrón de búsqueda TODO
y un contexto de coincidencia de 5 líneas (el contexto se puede habilitar y deshabilitar interactivamente, esto también anula el tamaño de contexto predeterminado de 2 líneas):
ug -Q -C5 -e TODO main.cpp
Para ver y buscar el contenido de un archivo (por ejemplo, zip, tarball):
ug -Q -z archive.tar.gz
Para seleccionar interactivamente archivos de project.zip
para descomprimir con unzip
, utilizando el modo de selección de consultas UGREP (presione Entrar para seleccionar líneas):
unzip project.zip `zipinfo -1 project.zip | ugrep -Q`
? Volver a la tabla de contenido
-L, --files-without-match
Only the names of files not containing selected lines are written
to standard output. Pathnames are listed once per file searched.
If the standard input is searched, the string ``(standard input)''
is written.
-l, --files-with-matches
Only the names of files containing selected lines are written to
standard output. ugrep will only search a file until a match has
been found, making searches potentially less expensive. Pathnames
are listed once per file searched. If the standard input is
searched, the string ``(standard input)'' is written.
-R, --dereference-recursive
Recursively read all files under each directory. Follow all
symbolic links to files and directories, unlike -r.
-r, --recursive
Recursively read all files under each directory, following symbolic
links only if they are on the command line. Note that when no FILE
arguments are specified and input is read from a terminal,
recursive searches are performed as if -r is specified.
-S, --dereference-files
When -r is specified, symbolic links to files are followed, but not
to directories. The default is not to follow symbolic links.
--depth=[MIN,][MAX], -1, -2, -3, ... -9, -10, -11, -12, ...
Restrict recursive searches from MIN to MAX directory levels deep,
where -1 (--depth=1) searches the specified path without recursing
into subdirectories. Note that -3 -5, -3-5, and -35 search 3 to 5
levels deep. Enables -r if -R or -r is not specified.
-g GLOBS, --glob=GLOBS
Search only files whose name matches the specified comma-separated
list of GLOBS, same as --include='glob' for each `glob' in GLOBS.
When a `glob' is preceded by a `!' or a `^', skip files whose name
matches `glob', same as --exclude='glob'. When `glob' contains a
`/', full pathnames are matched. Otherwise basenames are matched.
When `glob' ends with a `/', directories are matched, same as
--include-dir='glob' and --exclude-dir='glob'. A leading `/'
matches the working directory. This option may be repeated and may
be combined with options -M, -O and -t to expand searches. See
`ugrep --help globs' and `man ugrep' section GLOBBING for details.
-O EXTENSIONS, --file-extension=EXTENSIONS
Search only files whose filename extensions match the specified
comma-separated list of EXTENSIONS, same as --include='*.ext' for
each `ext' in EXTENSIONS. When `ext' is preceded by a `!' or a
`^', skip files whose filename extensions matches `ext', same as
--exclude='*.ext'. This option may be repeated and may be combined
with options -g, -M and -t to expand the recursive search.
-t TYPES, --file-type=TYPES
Search only files associated with TYPES, a comma-separated list of
file types. Each file type corresponds to a set of filename
extensions passed to option -O and filenames passed to option -g.
For capitalized file types, the search is expanded to include files
with matching file signature magic bytes, as if passed to option
-M. When a type is preceded by a `!' or a `^', excludes files of
the specified type. This option may be repeated.
--stats
Output statistics on the number of files and directories searched,
and the inclusion and exclusion constraints applied.
Si no se especifican argumentos de archivo y se lee la entrada desde un terminal, las búsquedas recursivas se realizan como si se especifica -r
. Para forzar la lectura de la entrada estándar, especifique -
como argumento del archivo.
Para enumerar recursivamente todos los archivos no vacíos en el directorio de trabajo:
ug -r -l ''
Para enumerar todos los archivos no vacíos en el directorio de trabajo pero no más profundo (ya que se da un argumento de archivo, en este caso .
Para el directorio de trabajo):
ug -l '' .
Para enumerar todos los archivos no vacíos en el directorio mydir
pero no más profundo (ya que se da un argumento de archivo):
ug -l '' mydir
Para enumerar todos los archivos no vacíos en el directorio mydir
y más profundo mientras sigue los enlaces simbólicos:
ug -R -l '' mydir
Para enumerar recursivamente todos los archivos no vacíos en la ruta especificada, mientras visitan solo subdirectorios, es decir, los directorios mydir/
y los subdirectorios en un nivel más profundo mydir/*/
se visitan (tenga en cuenta que -2 -l
se puede abreviar a -l2
):
ug -2 -l '' mydir
Para enumerar recursivamente todos los archivos no vacíos en el directorio mydir
, no seguir ningún enlace simbólico (excepto cuando está en la línea de comando como mydir
):
ug -rl '' mydir
Para enumerar recursivamente todos los makefiles que coinciden con el texto CPP
:
ug -l -tmake 'CPP'
Para enumerar recursivamente todo Makefile.*
bin_PROGRAMS
coincidente:
ug -l -g'Makefile.*' 'bin_PROGRAMS'
Para enumerar recursivamente todos los archivos no vacíos con extensión .sh, con -Osh
:
ug -l -Osh ''
Para enumerar recursivamente todos los scripts de shell basados en extensiones y shebangs con -tShell
:
ug -l -tShell ''
Para enumerar recursivamente todos los scripts de shell basados solo en extensiones con -tshell
:
ug -l -tshell ''
? Volver a la tabla de contenido
--bool, -%, -%%
Specifies Boolean query patterns. A Boolean query pattern is
composed of `AND', `OR', `NOT' operators and grouping with `(' `)'.
Spacing between subpatterns is the same as `AND', `|' is the same
as `OR' and a `-' is the same as `NOT'. The `OR' operator binds
more tightly than `AND'. For example, --bool 'A|B C|D' matches
lines with (`A' or `B') and (`C' or `D'), --bool 'A -B' matches
lines with `A' and not `B'. Operators `AND', `OR', `NOT' require
proper spacing. For example, --bool 'A OR B AND C OR D' matches
lines with (`A' or `B') and (`C' or `D'), --bool 'A AND NOT B'
matches lines with `A' without `B'. Quoted subpatterns are matched
literally as strings. For example, --bool 'A "AND"|"OR"' matches
lines with `A' and also either `AND' or `OR'. Parentheses are used
for grouping. For example, --bool '(A B)|C' matches lines with `A'
and `B', or lines with `C'. Note that all subpatterns in a Boolean
query pattern are regular expressions, unless -F is specified.
Options -E, -F, -G, -P and -Z can be combined with --bool to match
subpatterns as strings or regular expressions (-E is the default.)
This option does not apply to -f FILE patterns. The double short
option -%% enables options --bool --files. Option --stats displays
the Boolean search patterns applied. See also options --and,
--andnot, --not, --files and --lines.
--files
Boolean file matching mode, the opposite of --lines. When combined
with option --bool, matches a file if all Boolean conditions are
satisfied. For example, --bool --files 'A B|C -D' matches a file
if some lines match `A', and some lines match either `B' or `C',
and no line matches `D'. See also options --and, --andnot, --not,
--bool and --lines. The double short option -%% enables options
--bool --files.
--lines
Boolean line matching mode for option --bool, the default mode.
--and [[-e] PATTERN] ... -e PATTERN
Specify additional patterns to match. Patterns must be specified
with -e. Each -e PATTERN following this option is considered an
alternative pattern to match, i.e. each -e is interpreted as an OR
pattern. For example, -e A -e B --and -e C -e D matches lines with
(`A' or `B') and (`C' or `D'). Note that multiple -e PATTERN are
alternations that bind more tightly together than --and. Option
--stats displays the search patterns applied. See also options
--not, --andnot, and --bool.
--andnot [[-e] PATTERN] ...
Combines --and --not. See also options --and, --not, and --bool.
--not [-e] PATTERN
Specifies that PATTERN should not match. Note that -e A --not -e B
matches lines with `A' or lines without a `B'. To match lines with
`A' that have no `B', specify -e A --andnot -e B. Option --stats
displays the search patterns applied. See also options --and,
--andnot, and --bool.
--stats
Output statistics on the number of files and directories searched,
and the inclusion and exclusion constraints applied.
Tenga en cuenta que las opciones --and
, --not
, y --andnot
requieren -e PATTERN
.
La opción -%
hace todos los patrones basados en booleanos, lo que respalda las siguientes operaciones lógicas enumeradas desde el nivel más alto de precedencia hasta el más bajo:
operador | alternativa | resultado |
---|---|---|
"x" | coincidir x literalmente y exactamente como se especifica (utilizando los escapes de regex estándar Q y E ) | |
( ) | Agrupación de expresión booleana | |
-x | NOT x | partido invertido, coincidencias de IE si x no coincide |
x|y | x OR y | coincide con líneas con x o y |
xy | x AND y | coincide con líneas con x e y |
x
e y
son subpaterarios que no comienzan con los símbolos especiales |
, -
, y (
(use citas o un escape para que coincida con estos);
-
NOT
son iguales y tome prioridad OR
, lo que significa que -x|y
== (-x)|y
por ejemplo.
|
y OR
son los mismos y tomar prioridad AND
, lo que significa que xy|z
== x (y|z)
por ejemplo;
La opción --stats
muestra las consultas booleanas en forma legible por humanos convertidos en CNF (forma normal conjuntiva), después de completar la búsqueda. Para mostrar el CNF sin una búsqueda, lea desde la entrada estándar terminado por un EOF, como echo | ugrep -% '...' --stats
.
Los subpaterarios están iluminados en el color en la salida, excepto los negados con NOT
(un subpatrón NOT
puede aparecer en una línea coincidente cuando se usa un patrón OR como x|-y
). Tenga en cuenta que los subpaterarios pueden superponerse. En ese caso, solo el primer subpatrón coincidente está a la altura del color.
Se pueden combinar varias líneas cuando los subpaterarios coinciden con nuevas líneas. Sin embargo, hay una excepción: los subpaterarios que terminan con (?=X)
LookAheads puede no coincidir cuando X
abarca múltiples líneas.
Los patrones vacíos coinciden con cualquier línea (estándar GREP). Por lo tanto, -% 'x|""|y'
coincide con todo y x
e y
no están altos de color. La opción -y
debe usarse para mostrar cada línea como contexto, por ejemplo -y 'x|y'
.
Consulta interactiva similar a FZF (búsqueda booleana con cadenas fijas con coincidencia difusa para permitir, por ejemplo, hasta 4 caracteres adicionales coincidentes con -Z+4
en palabras con -w
), presione la pestaña y alt -y para ver un archivo con coincidencias. Presione Shift-Tab y Alt-L para volver a la lista de archivos coincidentes:
ug -Q -%% -l -w -F -Z+4 --sort=best
Para encontrar recursivamente todos los archivos que contienen tanto hot
como dog
en cualquier lugar del archivo con la opción --files
:
ug -%% 'hot dog'
ug --files -e hot --and dog
Para encontrar líneas que contienen tanto hot
como dog
en myfile.txt
:
ug -% 'hot dog' myfile.txt
ug -e hot --and dog myfile.txt
Para encontrar líneas que contengan place
y luego también hotdog
o taco
(o ambos) en myfile.txt
:
ug -% 'hotdog|taco place' myfile.txt
ug -e hotdog -e taco --and place myfile.txt
Lo mismo, pero excluye líneas a juego de diner
:
ug -% 'hotdog|taco place -diner' myfile.txt
ug -e hotdog -e taco --and place --andnot diner myfile.txt
Para encontrar líneas con diner
o líneas que coincidan tanto fast
como en food
, pero no bad
en myfile.txt
:
ug -% 'diner|(fast food -bad)' myfile.txt
Para encontrar líneas con fast food
(exactamente) o líneas con diner
, pero no bad
o old
en myfile.txt
:
ug -% '"fast food"|diner -bad -old' myfile.txt
Lo mismo, pero usando una expresión booleana diferente que tiene el mismo significado:
ug -% '"fast food"|diner -(bad|old)' myfile.txt
Para encontrar líneas con diner
lo que implica good
en myfile.txt
(es decir, exhibir las líneas con good
sin diner
y líneas de espectáculos con diner
pero solo aquellos con good
, lo cual está lógicamente implícito):
ug -% 'good|-diner' myfile.txt
ug -e good --not diner myfile.txt
Para encontrar líneas con foo
y -bar
y "baz"
en myfile.txt
(no eso -
"
debe coincidir con escapes y con
--and -e -bar
):
ug -% 'foo -bar "baz"' myfile.txt
ug -e foo --and -e -bar --and '"baz"' myfile.txt
Para buscar myfile.cpp
para líneas con TODO
o FIXME
pero no ambos en la misma línea, como Xor:
ug -% 'TODO|FIXME -(TODO FIXME)' myfile.cpp
ug -e TODO -e FIXME --and --not TODO --not FIXME myfile.cpp
? Volver a la tabla de contenido
-e PATTERN, --regexp=PATTERN
Specify a PATTERN to search the input. An input line is selected
if it matches any of the specified patterns. This option is useful
when multiple -e options are used to specify multiple patterns, or
when a pattern begins with a dash (`-'), or to specify a pattern
after option -f or after the FILE arguments.
-f FILE, --file=FILE
Read newline-separated patterns from FILE. White space in patterns
is significant. Empty lines in FILE are ignored. If FILE does not
exist, the GREP_PATH environment variable is used as path to FILE.
If that fails, looks for FILE in /usr/local/share/ugrep/pattern.
When FILE is a `-', standard input is read. This option may be
repeated.
-L, --files-without-match
Only the names of files not containing selected lines are written
to standard output. Pathnames are listed once per file searched.
If the standard input is searched, the string ``(standard input)''
is written.
-N PATTERN, --neg-regexp=PATTERN
Specify a negative PATTERN to reject specific -e PATTERN matches
with a counter pattern. Note that longer patterns take precedence
over shorter patterns, i.e. a negative pattern must be of the same
length or longer to reject matching patterns. Option -N cannot be
specified with -P. This option may be repeated.
-v, --invert-match
Selected lines are those not matching any of the specified
patterns.
-w, --word-regexp
The PATTERN is searched for as a word, such that the matching text
is preceded by a non-word character and is followed by a non-word
character. Word-like characters are Unicode letters, digits and
connector punctuations such as underscore.
-x, --line-regexp
Select only those matches that exactly match the whole line, as if
the patterns are surrounded by ^ and $.
Consulte también Patrones de consulta booleana con -%, -%%, -y, -No para opciones de consulta booleana más potentes que las opciones tradicionales de GNU/BSD GREP.
Para mostrar líneas en el archivo myfile.sh
pero no las líneas que coinciden ^[ t]*#
:
ug -v '^[ t]*#' myfile.sh
Para buscar myfile.cpp
para líneas con FIXME
y urgent
, pero no Scotty
:
ugrep FIXME myfile.cpp | ugrep urgent | ugrep -v Scotty
Lo mismo, pero usando -%
para consultas booleanas:
ug -% 'FIXME urgent -Scotty' myfile.cpp
Para buscar decimales usando el patrón d+
que no comienzan con 0
usando el patrón negativo 0d+
y excluyendo 555
:
ug -e 'd+' -N '0d+' -N 555 myfile.cpp
Para buscar palabras que comiencen con disp
sin coincidir con display
en el archivo myfile.py
utilizando un "patrón negativo" -N '/<display>'
donde -N
especifica un patrón negativo adicional para omitir las coincidencias:
ug -e '<disp' -N '<display>' myfile.py
Para buscar líneas con la display
de palabras en el archivo myfile.py
omitiendo esta palabra en cadenas y comentarios, donde -f
especifica patrones en archivos que son patrones predefinidos en este caso:
ug -n -w 'display' -f python/zap_strings -f python/zap_comments myfile.py
Para mostrar líneas que no son líneas en blanco:
ug -x -e '.*' -N 'h*' myfile.py
Lo mismo, pero usando -v
y -x
con h*
, es decir, patrón ^h*$
:
ug -v -x 'h*' myfile.py
Para enumerar recursivamente todos los archivos de Python que no contienen la display
de la palabra, lo que permite que la palabra ocurra en cadenas y comentarios:
ug -RL -tPython -w 'display' -f python/zap_strings -f python/zap_comments
? Volver a la tabla de contenido
--encoding=ENCODING
The encoding format of the input. The default ENCODING is binary
and UTF-8 which are the same. Note that option -U specifies binary
PATTERN matching (text matching is the default.)
Los archivos binarios, ASCII y UTF-8 no requieren esta opción para buscarlos. Además, los archivos UTF-16 y UTF-32 no requieren esta opción para buscarlos, suponiendo que los archivos UTF-16 y UTF-32 comiencen con un UTF BOM (marca de pedido de bytes) como de costumbre. Otras codificaciones de archivos requieren la opción --encoding=ENCODING
:
codificación | parámetro |
---|---|
ASCII | n / A |
UTF-8 | n / A |
UTF-16 con Bom | n / A |
UTF-32 con BOM | n / A |
UTF-16 no nació | UTF-16 o UTF-16BE |
UTF-16 LE W/O Bom | UTF-16LE |
UTF-32 sin nacimiento | UTF-32 o UTF-32BE |
UTF-32 sin nacimiento | UTF-32LE |
Latin-1 | LATIN1 o ISO-8859-1 |
ISO-8859-1 | ISO-8859-1 |
ISO-8859-2 | ISO-8859-2 |
ISO-8859-3 | ISO-8859-3 |
ISO-8859-4 | ISO-8859-4 |
ISO-8859-5 | ISO-8859-5 |
ISO-8859-6 | ISO-8859-6 |
ISO-8859-7 | ISO-8859-7 |
ISO-8859-8 | ISO-8859-8 |
ISO-8859-9 | ISO-8859-9 |
ISO-8859-10 | ISO-8859-10 |
ISO-8859-11 | ISO-8859-11 |
ISO-8859-13 | ISO-8859-13 |
ISO-8859-14 | ISO-8859-14 |
ISO-8859-15 | ISO-8859-15 |
ISO-8859-16 | ISO-8859-16 |
Mac (CR = Newline) | MAC |
Macroman (CR = Newline) | MACROMAN |
EBCDIC | EBCDIC |
Código DOS Página 437 | CP437 |
Código DOS Página 850 | CP850 |
Código DOS Página 858 | CP858 |
Código de Windows Página 1250 | CP1250 |
Código de Windows Página 1251 | CP1251 |
Código de Windows Página 1252 | CP1252 |
Código de Windows Página 1253 | CP1253 |
Código de Windows Página 1254 | CP1254 |
Código de Windows Página 1255 | CP1255 |
Código de Windows Página 1256 | CP1256 |
Código de Windows Página 1257 | CP1257 |
Código de Windows Página 1258 | CP1258 |
KOI8-R | KOI8-R |
KOI8-U | KOI8-U |
Koi8-ru | KOI8-RU |
Tenga en cuenta que los patrones regex siempre se especifican en UTF-8 (incluye ASCII). Para buscar archivos binarios con patrones binarios, vea la búsqueda y la visualización de archivos binarios con -u, -w y -x.
Para enumerar recursivamente todos los archivos que son ASCII (es decir, 7 bits):
ug -L '[^[:ascii:]]'
Para enumerar recursivamente todos los archivos que no son ASCII, es decir, UTF-8, UTF-16 y UTF-32 con caracteres no ASCII UNICODE (U+0080 y arriba):
ug -l '[^[:ascii:]]'
Para verificar si un archivo contiene unicode no ASCII (u+0080 y más):
ug -q '[^[:ascii:]]' myfile && echo "contains Unicode"
Para eliminar los caracteres Unicode no válidos de un archivo (tenga en cuenta que -o
puede no funcionar porque se detectan y rechazan datos binarios y se agregan nuevas líneas, pero --format="%o%
no verifica el binario y copia la coincidencia" Como está ". ):
ug "[p{Unicode}n]" --format="%o" badfile.txt
Para enumerar recursivamente archivos con contenido UTF no válido (es decir, secuencias o archivos de bytes UTF-8 inválidos que contienen cualquier punto de código UTF-8/16/32 que esté fuera del rango de Unicode válido) al hacer coincidir cualquier punto de código .
y utilizando un patrón negativo -N 'p{Unicode}'
para ignorar cada carácter de unicode válido:
ug -l -e '.' -N 'p{Unicode}'
Para mostrar líneas que contienen emojis de la cara risa:
ug '[?-?]' emojis.txt
Los mismos resultados se obtienen usando x{hhhh}
para seleccionar un rango de caracteres Unicode:
ug '[x{1F600}-x{1F60F}]' emojis.txt
Para mostrar líneas que contienen los nombres Gödel (o Goedel), Escher o Bach:
ug 'G(ö|oe)del|Escher|Bach' GEB.txt wiki.txt
Para buscar lorem
en la caja inferior o superior en un archivo UTF-16 que está marcado con un BOM UTF-16:
ug -iw 'lorem' utf16lorem.txt
Para buscar utf16lorem.txt cuando este archivo no tiene utf-16 Bom, usando --encoding
:
ug --encoding=UTF-16 -iw 'lorem' utf16lorem.txt
Para buscar archivo spanish-iso.txt
codificado en ISO-8859-1:
ug --encoding=ISO-8859-1 -w 'año' spanish-iso.txt
? Volver a la tabla de contenido
-o, --only-matching
Output only the matching part of lines. If -A, -B or -C is
specified, fits the match and its context on a line within the
specified number of columns.
Múltiples líneas pueden coincidir con patrones que coinciden con los personajes de Newline. Use la opción -o
para emitir solo la coincidencia, no las líneas completas que coinciden.
Para que coincida con n
ruptura de la línea, incluya n
en el patrón para que coincida con el carácter LF. Si desea que coincidan rn
y n
rupturas de línea, use r?n
o simplemente use R
para que coincida con cualquier ruptura de línea unicode rn
, r
, v
, f
, n
, u u +0085, U+2028 y U+2029.
Para que coincida con C/C ++ /*...*/
Comentarios de múltiples líneas:
ug '/*(.*n)*?.**+/' myfile.cpp
Para que coincidan con los comentarios de C/C ++ utilizando los patrones c/comments
predefinidos con -fc/comments
, restringidos a la parte coincidente solo con la opción -o
:
ug -of c/comments myfile.cpp
Igual que sed -n '/begin/,/end/p'
: para que coincida con todas las líneas entre una línea que contiene begin
y la primera línea después de eso que contiene end
, utilizando repetición perezosa:
ug -o '.*begin(.|n)*?end.*' myfile.txt
? Volver a la tabla de contenido
-A NUM, --after-context=NUM
Output NUM lines of trailing context after matching lines. Places
a --group-separator between contiguous groups of matches. If -o is
specified, output the match with context to fit NUM columns after
the match or shortens the match. See also options -B, -C and -y.
-B NUM, --before-context=NUM
Output NUM lines of leading context before matching lines. Places
a --group-separator between contiguous groups of matches. If -o is
specified, output the match with context to fit NUM columns before
the match or shortens the match. See also options -A, -C and -y.
-C NUM, --context=NUM
Output NUM lines of leading and trailing context surrounding each
matching line. Places a --group-separator between contiguous
groups of matches. If -o is specified, output the match with
context to fit NUM columns before and after the match or shortens
the match. See also options -A, -B and -y.
-y, --any-line
Any line is output (passthru). Non-matching lines are output as
context with a `-' separator. See also options -A, -B, and -C.
--width[=NUM]
Truncate the output to NUM visible characters per line. The width
of the terminal window is used if NUM is not specified. Note that
double wide characters in the output may result in wider lines.
-o, --only-matching
Output only the matching part of lines. If -A, -B or -C is
specified, fits the match and its context on a line within the
specified number of columns.
Para mostrar dos líneas de contexto antes y después de una línea de juego:
ug -C2 'FIXME' myfile.cpp
Para mostrar tres líneas de contexto después de una línea coincidente:
ug -A3 'FIXME.*' myfile.cpp:
Para mostrar una línea de contexto antes de cada línea de coincidencia con una definición de función C (los nombres C no son unicodos):
ug -B1 -f c/functions myfile.c
Para mostrar una línea de contexto antes de cada línea de coincidencia con una definición de función de C ++ (los nombres de C ++ pueden ser unicode):
ug -B1 -f c++/functions myfile.cpp
Para mostrar cualquier línea no coincidente como contexto para las líneas coincidentes con -y
:
ug -y -f c++/functions myfile.cpp
Para mostrar un hexdump de una línea coincidente con una línea de contexto hexdump:
ug -C1 -UX 'xaaxbbxcc' a.out
El contexto dentro de una línea se muestra con la opción -o
con una opción de contexto:
ug -o -C20 'pattern' myfile.cpp
Lo mismo, pero con una salida bonita con encabezados, números de línea y números de columna ( -k
) y contexto mostrando:
ug --pretty -oC20 'pattern' myfile.cpp
? Volver a la tabla de contenido
-f FILE, --file=FILE
Read newline-separated patterns from FILE. White space in patterns
is significant. Empty lines in FILE are ignored. If FILE does not
exist, the GREP_PATH environment variable is used as path to FILE.
If that fails, looks for FILE in /usr/local/share/ugrep/pattern.
When FILE is a `-', standard input is read. This option may be
repeated.
--ignore-files[=FILE]
Ignore files and directories matching the globs in each FILE that
is encountered in recursive searches. The default FILE is
`.gitignore'. Matching files and directories located in the
directory of the FILE and in subdirectories below are ignored.
Globbing syntax is the same as the --exclude-from=FILE gitignore
syntax, but files and directories are excluded instead of only
files. Directories are specifically excluded when the glob ends in
a `/'. Files and directories explicitly specified as command line
arguments are never ignored. This option may be repeated to
specify additional files.
-g GLOBS, --glob=GLOBS
Search only files whose name matches the specified comma-separated
list of GLOBS, same as --include='glob' for each `glob' in GLOBS.
When a `glob' is preceded by a `!' or a `^', skip files whose name
matches `glob', same as --exclude='glob'. When `glob' contains a
`/', full pathnames are matched. Otherwise basenames are matched.
When `glob' ends with a `/', directories are matched, same as
--include-dir='glob' and --exclude-dir='glob'. A leading `/'
matches the working directory. This option may be repeated and may
be combined with options -M, -O and -t to expand searches. See
`ugrep --help globs' and `man ugrep' section GLOBBING for details.
-O EXTENSIONS, --file-extension=EXTENSIONS
Search only files whose filename extensions match the specified
comma-separated list of EXTENSIONS, same as --include='*.ext' for
each `ext' in EXTENSIONS. When `ext' is preceded by a `!' or a
`^', skip files whose filename extensions matches `ext', same as
--exclude='*.ext'. This option may be repeated and may be combined
with options -g, -M and -t to expand the recursive search.
-t TYPES, --file-type=TYPES
Search only files associated with TYPES, a comma-separated list of
file types. Each file type corresponds to a set of filename
extensions passed to option -O and filenames passed to option -g.
For capitalized file types, the search is expanded to include files
with matching file signature magic bytes, as if passed to option
-M. When a type is preceded by a `!' or a `^', excludes files of
the specified type. This option may be repeated.
--stats
Output statistics on the number of files and directories searched,
and the inclusion and exclusion constraints applied.
Los tipos de archivos se enumeran con ugrep -tlist
. La lista se basa en extensiones de nombre de archivo establecidas y "bytes mágicos". Si tiene un tipo de archivo que no está en la lista, use opciones -O
y/o -M
. Es posible que desee definir un alias, por ejemplo alias ugft='ugrep -Oft'
como una abreviatura de buscar archivos con sufijo de nombre de archivo .ft
.
Para mostrar de forma recursiva definiciones de funciones en archivos c/c ++ ( .h
, .hpp
, .c
, .cpp
, etc.) con números de línea con -tc++
, -o
, -n
y -f c++/functions
:
ug -on -tc++ -f c++/functions
Para mostrar recursivamente las definiciones de funciones en archivos .c
y .cpp
con números de línea con -Oc,cpp
, -o
, -n
y -f c++/functions
:
ug -on -Oc,cpp -f c++/functions
Para enumerar recursivamente todos los archivos de shell con -tShell
para que coincidan con extensiones y archivos de nombre de archivo con shell shebangs, excepto archivos con sufijo .sh
:
ug -l -tShell -O^sh ''
Para enumerar recursivamente todos los archivos que no son de cáscara con -t^Shell
:
ug -l -t^Shell ''
Para enumerar recursivamente todos los archivos de shell con shell shebangs que no tienen extensiones de nombre de archivo shell:
ug -l -tShell -t^shell ''
Para buscar líneas con FIXME
en comentarios de C/C ++, excluyendo FIXME
en cadenas de múltiples líneas:
ug -n 'FIXME' -f c++/zap_strings myfile.cpp
Para leer los patrones TODO
y FIXME
de la entrada estándar para coincidir con las líneas en la entrada, al tiempo que excluye las coincidencias en cadenas C ++:
ug -on -f - -f c++/zap_strings myfile.cpp <<END
TODO
FIXME
END
Para mostrar el elemento XML y las etiquetas de atributo en un archivo XML, restringido a la parte coincidente con -o
, excluyendo las etiquetas que se colocan en comentarios (múltiples):
ug -o -f xml/tags -f xml/zap_comments myfile.xml
? Volver a la tabla de contenido
-z, --decompress
Search compressed files and archives. Archives (.cpio, .pax, .tar)
and compressed archives (e.g. .zip, .7z, .taz, .tgz, .tpz, .tbz,
.tbz2, .tb2, .tz2, .tlz, .txz, .tzst) are searched and matching
pathnames of files in archives are output in braces. When used
with option --zmax=NUM, searches the contents of compressed files
and archives stored within archives up to NUM levels. If -g, -O,
-M, or -t is specified, searches files stored in archives whose
filenames match globs, match filename extensions, match file
signature magic bytes, or match file types, respectively.
Supported compression formats: gzip (.gz), compress (.Z), zip, 7z,
bzip2 (requires suffix .bz, .bz2, .bzip2, .tbz, .tbz2, .tb2, .tz2),
lzma and xz (requires suffix .lzma, .tlz, .xz, .txz),
lz4 (requires suffix .lz4),
zstd (requires suffix .zst, .zstd, .tzst),
brotli (requires suffix .br),
bzip3 (requires suffix .bz3).
--zmax=NUM
When used with option -z (--decompress), searches the contents of
compressed files and archives stored within archives by up to NUM
expansion stages. The default --zmax=1 only permits searching
uncompressed files stored in cpio, pax, tar, zip and 7z archives;
compressed files and archives are detected as binary files and are
effectively ignored. Specify --zmax=2 to search compressed files
and archives stored in cpio, pax, tar, zip and 7z archives. NUM
may range from 1 to 99 for up to 99 decompression and de-archiving
steps. Increasing NUM values gradually degrades performance.
Archivos comprimidos con GZIP ( .gz
), Compress ( .Z
), BZIP2 ( .bz
, .bz2
, .bzip2
), LZMA (.LZMA), XZ ( .xz
), LZ4 ( .lz4
), ZSTD .lzma
.zst
, .zstd
), brotli ( .br
) y bzip3 ( .bz3
) se buscan con la opción -z
cuando las bibliotecas correspondientes se instalan y compilan con UGREP. Esta opción no requiere que los archivos se compriman. También se buscan archivos sin comprimir, aunque más lentos.
Se pueden buscar otros formatos de compresión con filtros UGREP .
Los archivos (CPIO, JAR, PAX, TAR, ZIP y 7Z) se buscan con la opción -z
. Los archivos regulares en un archivo que coinciden se emiten con los nombres de ruta de archivo encerrados en {
y }
aparatos ortopédicos. Los formatos de alquitrán soportados son V7, Ustar, Gnu, Oldgnu y Pax. Los formatos CPIO compatibles son ODC, NewC y CRC. No es compatible es el obsoleto formato binario binario no portátil no portátil. Los formatos de archivo CPIO, TAR y PAX se reconocen automáticamente con la opción -z
en función de su contenido, independientemente de su sufijo de nombre de archivo.
Por defecto, también se buscan archivos sin comprimir almacenados dentro de los archivos ZIP: todos los archivos CPIO, PAX y TAR almacenados en los archivos ZIP y 7Z se reconocen y buscan automáticamente. Sin embargo, de manera predeterminada, no se reconocen los archivos comprimidos almacenados dentro de los archivos, por ejemplo, los archivos zip almacenados dentro de los archivos TAR no se buscan, sino que todos los archivos y archivos comprimidos se buscan como si fueran archivos binarios sin descomprimirlos.
Especifique --zmax=NUM
para buscar archivos que contienen archivos y archivos comprimidos para hasta los niveles NUM
. El valor de NUM
puede variar de 1 a 99 para hasta 99 pasos de descompresión y desarchiving para expandir hasta 99 archivos anidados. Más grande --zmax=NUM
degradan el rendimiento. Es poco probable que alguna vez necesite 99 como --zmax=2
es suficiente para la mayoría de los casos de uso práctico, como la búsqueda de archivos zip almacenados en archivos de tar.
Cuando la opción -z
se usa con opciones -g
, -O
, -M
o -t
, archivos y archivos comprimidos y sin comprimir que coinciden solo con los criterios de selección del nombre de archivo (global, extensión, bytes mágicos o tipo de archivo) se buscan solamente. Por ejemplo, ugrep -r -z -tc++
busca archivos C ++ como main.cpp
y archivos zip y alquitrán que contienen archivos C ++ como main.cpp
. También se incluyen en la búsqueda archivos C ++ comprimidos como main.cpp.gz
y main.cpp.xz
cuando está presente. También cualquier archivo CPIO, PAX, TAR, ZIP y 7Z cuando se presente se busca archivos C ++ que contienen, como main.cpp
. Use la opción --stats
para ver una lista de los patrones del mundo aplicados para filtrar los nombres de ruta del archivo en la búsqueda recursiva y al buscar contenido del archivo.
Cuando la opción -z
se usa con opciones -g
, -O
, -M
o -t
para buscar CPIO, jar, pax, tar, zip y 7z archivos, archivos archivados que coinciden solo con los criterios de selección del nombre de archivo solo se buscan.
Los formatos GZIP, Compress y ZIP se detectan automáticamente, lo cual es útil al leer datos comprimidos por GZIP de la entrada estándar, por ejemplo, la entrada redirigida de una tubería. Otros formatos de compresión requieren un sufijo de nombre de archivo: .bz
, .bz2
o .bzip2
para bzip2, .lzma
para lzma, .xz
para xz, .lz4
para lz4, .zst
o .zstd
para zstd, .br
para brotli y .bz3
para bzip3. También se reconocen los mortificantes del archivo de alquitrán comprimidos .taz
y .tpz
para gzip, .tbz
, .tbz2
, .tb2
y .tgz
para bzip2, .tlz
para lzma, .txz
para xz y .tzst
.tz2
ZSTD. Para buscar estos formatos con UGREP desde la entrada estándar, use la opción --label='stdin.bz2'
para bzip2, --label='stdin.lzma'
para lzma, --label='stdin.xz'
para xz, --label='stdin.lz4
para LZ4 y --label='stdin.zst
para ZSTD y así sucesivamente. El nombre stdin
es arbitrario y puede omitirse:
formato | sufijo de nombre de archivo | Tar/Pax Archive Sustifijo corto | ¿Se requiere sufijo? | Ugrep de Stdin | biblioteca |
---|---|---|---|---|---|
zip | .gz | .taz , .tgz , .tpz | No | automático | libz |
comprimir | .Z | .taZ , .tZ | No | automático | incorporado |
cremallera | .zip , .zipx , .ZIP | No | automático | libz | |
7zip | .7z | Sí | --label=.7z | incorporado | |
bzip2 | .bz , .bz2 , .bzip2 | .tb2 , .tbz , .tbz2 , .tz2 | Sí | --label=.bz2 | libbz2 |
lzma | .lzma | .tlz | Sí | --label=.lzma | Liblzma |
xz | .xz | .txz | Sí | --label=.xz | Liblzma |
LZ4 | .lz4 | Sí | --label=.lz4 | Liblz4 | |
ZSTD | .zst , .zstd | .tzst | Sí | --label=.zst | libzstd |
brotli | .br | Sí | --label=.br | libbrotlidec | |
BZIP3 | .bz3 | Sí | --label=.bz3 | libbzip3 |
Los formatos GZIP, BZIP2, XZ, LZ4 y ZSTD admiten archivos comprimidos concatenados. Los archivos comprimidos concatenados se buscan como un solo archivo.
Los métodos de compresión postal compatibles se almacenan (0), deflate (8), BZIP2 (12), LZMA (14), XZ (95) y ZSTD (93). Los métodos BZIP2, LZMA, XZ y ZSTD requieren que se compilen UGREP con las bibliotecas de compresión correspondientes.
La búsqueda de archivos ZIP cifrados no es compatible (tal vez en futuras versiones, dependiendo de las solicitudes de mejoras).
La búsqueda de archivos de 7ZIP requiere mucha más RAM y más tiempo en comparación con otros métodos. La implementación de 7ZIP LZMA SDK no admite la transmisión, que requiere un archivo 7Z solicitable físico. Esto significa que los archivos 7Z no se pueden buscar cuando se anidan dentro de los archivos. Lo mejor es evitar 7zip. El soporte para 7ZIP se puede deshabilitar con ./build.sh --disable-7zip
para construir UGREP.
Opción -z
utiliza hilos para el paralelismo de tareas para acelerar la búsqueda de archivos más grandes ejecutando el descompresor simultáneamente con una búsqueda de la transmisión descomprimida.
Para enumerar todos los archivos no vacíos almacenados en un archivo de package.zip
, incluido el contenido de todos los archivos CPIO, PAX, TAR, ZIP y 7Z que se almacenan en él:
ug --zmax=2 -z -l '' package.zip
Lo mismo, pero solo enumere los archivos del código fuente de Python, incluidos los scripts que invocan Python, con opción -tPython
( ugrep -tlist
para más detalles):
ug --zmax=2 -z -l -tPython '' package.zip
Para buscar aplicaciones de Python distribuidas como un archivo de alquitrán con sus dependencias incluye como ruedas (archivos zip con código python), buscando la palabra my_class
en app.tgz
:
ug --zmax=2 -z -tPython -w my_class app.tgz
Para buscar recursivamente archivos C ++, incluidos archivos comprimidos para la palabra my_function
, mientras omita los comentarios de C y C ++:
ug -z -r -tc++ -Fw my_function -f cpp/zap_comments
Para buscar datos comprimidos BZIP2, LZMA, XZ, LZ4 y ZSTD en la entrada estándar, la --label
se puede usar para especificar la extensión correspondiente al formato de compresión para forzar la descompresión cuando la extensión BZIP2 no está disponible para UGREP, por ejemplo:
cat myfile.bz2 | ugrep -z --label='stdin.bz2' 'xyz'
Para buscar el archivo main.cpp
en project.zip
para líneas TODO
y FIXME
:
ug -z -g main.cpp -w -e 'TODO' -e 'FIXME' project.zip
Para buscar en Tarball project.tar.gz
para archivos C ++ con líneas TODO
y FIXME
:
ug -z -tc++ -w -e 'TODO' -e 'FIXME' project.tar.gz
Para buscar archivos que coincidan con el global *.txt
en project.zip
para la license
Word en cualquier caso (tenga en cuenta que el argumento del global -g
debe cotizarse):
ug -z -g '*.txt' -w -i 'license' project.zip
Para mostrar y página a través de todos los archivos C ++ en Tarball project.tgz
:
ug --pager -z -tc++ '' project.tgz
Para enumerar los archivos que coinciden con el Gitignore Style Glob /**/projects/project1.*
en projects.tgz
, seleccionando archivos que contienen en el archivo el texto December 12
:
ug -z -l -g '/**/projects/project1.*' -F 'December 12' projects.tgz
Para ver los datos metainf/manifest.mf en un archivo jar con -Ojar
y -OMF
para seleccionar el archivo jar y el archivo mf en el mismo ( -Ojar
es necesario, de lo contrario el archivo jar se omitirá aunque podríamos leerlo desde Entrada estándar en su lugar):
ug -z -h -OMF,jar '' my.jar
Para extraer archivos C ++ que contienen FIXME
de project.tgz
, usamos -m1
con --format="'%z '"
para generar una lista separada por espacios de los nombres de ratadizo de archivo ubicados en el archivo que coinciden con la palabra FIXME
:
tar xzf project.tgz `ugrep -z -l -tc++ --format='%z ' -w FIXME project.tgz`
Para realizar una búsqueda de profundidad con find
, luego use cpio
y ugrep
para buscar los archivos:
find . -depth -print | cpio -o | ugrep -z 'xyz'
? Volver a la tabla de contenido
--ignore-files[=FILE]
Ignore files and directories matching the globs in each FILE that
is encountered in recursive searches. The default FILE is
`.gitignore'. Matching files and directories located in the
directory of the FILE and in subdirectories below are ignored.
Globbing syntax is the same as the --exclude-from=FILE gitignore
syntax, but files and directories are excluded instead of only
files. Directories are specifically excluded when the glob ends in
a `/'. Files and directories explicitly specified as command line
arguments are never ignored. This option may be repeated to
specify additional files.
-M MAGIC, --file-magic=MAGIC
Only files matching the signature pattern MAGIC are searched. The
signature "magic bytes" at the start of a file are compared to
the MAGIC regex pattern. When matching, the file will be searched.
When MAGIC is preceded by a `!' or a `^', skip files with matching
MAGIC signatures. This option may be repeated and may be combined
with options -O and -t to expand the search. Every file on the
search path is read, making searches potentially more expensive.
-O EXTENSIONS, --file-extension=EXTENSIONS
Search only files whose filename extensions match the specified
comma-separated list of EXTENSIONS, same as --include='*.ext' for
each `ext' in EXTENSIONS. When `ext' is preceded by a `!' or a
`^', skip files whose filename extensions matches `ext', same as
--exclude='*.ext'. This option may be repeated and may be combined
with options -g, -M and -t to expand the recursive search.
-t TYPES, --file-type=TYPES
Search only files associated with TYPES, a comma-separated list of
file types. Each file type corresponds to a set of filename
extensions passed to option -O and filenames passed to option -g.
For capitalized file types, the search is expanded to include files
with matching file signature magic bytes, as if passed to option
-M. When a type is preceded by a `!' or a `^', excludes files of
the specified type. This option may be repeated.
-g GLOBS, --glob=GLOBS
Search only files whose name matches the specified comma-separated
list of GLOBS, same as --include='glob' for each `glob' in GLOBS.
When a `glob' is preceded by a `!' or a `^', skip files whose name
matches `glob', same as --exclude='glob'. When `glob' contains a
`/', full pathnames are matched. Otherwise basenames are matched.
When `glob' ends with a `/', directories are matched, same as
--include-dir='glob' and --exclude-dir='glob'. A leading `/'
matches the working directory. This option may be repeated and may
be combined with options -M, -O and -t to expand searches. See
`ugrep --help globs' and `man ugrep' section GLOBBING for details.
--stats
Output statistics on the number of files and directories searched,
and the inclusion and exclusion constraints applied.
¡Para enumerar recursivamente todos los archivos que comienzan con #!
shebangs:
ug -l -M'#!' ''
Para enumerar recursivamente todos los archivos que comienzan con #
pero no con #!
shebangs:
ug -l -M'#' -M'^#!' ''
Para enumerar recursivamente todos los archivos Python (Extension .py
o un shebang) con -tPython
:
ug -l -tPython ''
Para enumerar recursivamente todos los archivos que no son de cáscara con -t^Shell
:
ug -l -t^Shell ''
To recursively list Python files (extension .py
or a shebang) that have import statements, including hidden files with -.
:
ug -l. -tPython -f python/imports
? Back to table of contents
-Z[best][+-~][MAX], --fuzzy=[best][+-~][MAX]
Fuzzy mode: report approximate pattern matches within MAX errors.
The default is -Z1: one deletion, insertion or substitution is
allowed. If `+`, `-' and/or `~' is specified, then `+' allows
insertions, `-' allows deletions and `~' allows substitutions. For
example, -Z+~3 allows up to three insertions or substitutions, but
no deletions. If `best' is specified, then only the best matching
lines are output with the lowest cost per file. Option -Zbest
requires two passes over a file and cannot be used with standard
input or Boolean queries. Option --sort=best orders matching files
by best match. The first character of an approximate match always
matches a character at the beginning of the pattern. To fuzzy
match the first character, replace it with a `.' or `.?'. Option
-U applies fuzzy matching to ASCII and bytes instead of Unicode
text. No whitespace may be given between -Z and its argument.
The beginning of a pattern always matches the first character of an approximate match as a practical strategy to prevent many false "randomized" matches for short patterns. This also greatly improves search speed. Make the first character optional to optionally match it, eg p?attern
or use a dot as the start of the pattern to match any wide character (but this is slow).
Line feed ( n
) and NUL (