[ LEIA-ME | Guia do usuário | Indexação | Referências | Perguntas e respostas]
a opção -Q abre uma consulta TUI para pesquisar arquivos enquanto você digita!
O ugrep é rápido, fácil de usar e equipado com vários novos recursos que os usuários queriam
inclui uma TUI interativa com ajuda integrada, pesquisa semelhante à do Google com padrões AND/OR/NOT, pesquisa difusa, pesquisa (aninhada) de arquivos zip/7z/tar/pax/cpio, tarballs e arquivos compactados gz/Z/bz/ bz2/lzma/xz/lz4/zstd/brotli, pesquisa e arquivos binários hexdump, pesquisa de documentos como PDF, doc, docx e saída em JSON, XML, CSV ou seu próprio formato personalizado
Sintaxe de padrão regex estendida Unicode com correspondência de padrão multilinha sem a necessidade de opções especiais de linha de comando
inclui um indexador de arquivos para acelerar a pesquisa em sistemas de arquivos lentos e frios
um verdadeiro substituto para GNU grep (supondo que você copie ou crie um link simbólico ug
para grep
, e para egrep
e para fgrep
), ao contrário de outros grep populares que afirmam ser "alternativas grep" ou "substituições" quando eles realmente implementam linha de comando incompatível opções e usar um correspondente de regex incompatível, ou seja, apenas regex Perl versus POSIX BRE (grep) e ERE (egrep) quando ugrep suporta todos os regex modos
benchmarks mostram que ugrep é (um dos) o grep mais rápido usando o matcher regex RE/flex de alto desempenho baseado em DFA
se algo precisar ser melhorado ou adicionado ao ugrep, me avise!
A prioridade nº 1 é a garantia de qualidade para continuar garantindo que o ugrep não tenha bugs e seja confiável
faça o ugrep rodar ainda mais rápido, veja por exemplo #432, #421
compartilhe resultados de desempenho reproduzíveis
ug
é para uso interativo, que carrega um arquivo de configuração .ugrep opcional com suas preferências localizadas no diretório de trabalho ou diretório inicial, ug+
também pesquisa PDFs, documentos, e-books, metadados de imagens
ugrep
para uso em lote como GNU grep sem um arquivo de configuração .ugrep, ugrep+
também pesquisa PDFs, documentos, e-books, metadados de imagens
Corresponde aos padrões Unicode por padrão e pesquisa automaticamente arquivos codificados em UTF-8, UTF-16 e UTF-32
Corresponde múltiplas linhas com n
ou R
em padrões regex, nenhuma opção especial é necessária para fazer isso!
Ajuda integrada: ug --help
, onde ug --help WHAT
exibe opções relacionadas ao WHAT
você está procurando
ug --help regex
, ug --help globs
, ug --help fuzzy
, ug --help format
.
Fácil de usar, com arquivos de configuração personalizáveis usados pelo comando ug
destinado ao uso interativo que carrega um arquivo de configuração .ugrep com suas preferências
ug PATTERN ... ugrep --config PATTERN ...
ug --save-config ...options-you-want-to-save...
salva um arquivo de configuração .ugrep no diretório de trabalho para que na próxima vez que você executar ug
lá ele use essas opções. Faça isso em seu diretório inicial para salvar um arquivo de configuração .ugrep com opções que você geralmente deseja usar.
Consulta interativa TUI, pressione F1 ou CTRL-Z para obter ajuda e TAB/SHIFT-TAB para navegar até diretórios e arquivos
ug -Q ug -Q -e PATTERN
-Q
substitui PATTERN
na linha de comando para permitir que você insira padrões interativamente na TUI. Na TUI, use teclas ALT + letras para ativar/desativar "opções de letras" curtas, por exemplo ALT-n (opção -n
) para mostrar/ocultar números de linha.
Pesquise o conteúdo de arquivos (zip, tar, pax, jar, cpio, 7z) e arquivos compactados (gz, Z, bz, bz2, lzma, xz, lz4, zstd, brotli)
ug -z PATTERN ... ug -z --zmax=2 PATTERN ...
especifique -z --zmax=2
para pesquisar arquivos compactados e arquivos aninhados em arquivos. O argumento --zmax
pode variar de 1 (padrão) a 99 para até 99 etapas de descompactação e desarquivamento para pesquisar arquivos aninhados
Pesquise com padrões de consulta booleana semelhantes ao Google usando padrões -%
com AND
(ou apenas espaço), OR
(ou uma barra |
), NOT
(ou um traço -
), usando aspas para corresponder exatamente e agrupando com ( )
(mostrado em o lado esquerdo abaixo); ou com as opções -e
(como um "ou"), --and
, --andnot
e --not
padrões regex (mostrados no lado direito abaixo):
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' ...
onde A
, B
e C
são padrões regex arbitrários (use a opção -F
para pesquisar strings)
especifique a opção -%%
( --bool --files
) para aplicar a consulta booleana aos arquivos como um todo: um arquivo corresponde se todas as condições booleanas forem satisfeitas pela correspondência de padrões em todo o arquivo. Caso contrário, as condições booleanas se aplicam a linhas únicas por padrão, uma vez que os utilitários grep geralmente são correspondentes de padrões baseados em linhas. A opção --stats
exibe a consulta em formato legível após a conclusão da pesquisa.
Pesquise PDF, doc, docx, e-book e muito mais com ug+
usando filtros associados a extensões de nome de arquivo:
ug+ PATTERN ...
ou especifique --filter
com um tipo de arquivo para usar um utilitário 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 ...
o comando ug+
é igual ao comando ug
, mas também usa filtros para pesquisar PDFs, documentos e metadados de imagens
Exiba o contexto horizontal com a opção -o
( --only-matching
) e opções de contexto -ABC
, por exemplo, para encontrar correspondências em linhas muito longas, como fontes Javascript e JSON:
ug -o -C20 -nk PATTERN longlines.js
-o -C20
ajusta todas as correspondências com contexto em 20 caracteres antes e 20 caracteres depois de uma correspondência (ou seja, 40 caracteres Unicode no total), -nk
gera números de linhas e colunas.
Encontre correspondências aproximadas de padrões com pesquisa difusa, dentro da distância de Levenshtein especificada
ug -Z PATTERN ... ug -Z3 PATTTERN ...
-Zn
corresponde a até n
caracteres extras, ausentes ou substituídos, -Z+n
corresponde a até n
caracteres extras, -Zn
corresponde a até n
caracteres ausentes e -Z~n
corresponde a até n
caracteres substituídos. -Z
é padronizado como -Z1
.
Pesquisa semelhante a Fzf com regex (ou strings fixas com -F
), correspondência difusa com até 4 caracteres extras com -Z+4
e palavras apenas com -w
, usando -%%
para pesquisas booleanas em todo o arquivo
ug -Q -%% -l -w -Z+4 --sort=best
-l
lista os arquivos correspondentes na TUI, pressione TAB
e depois ALT-y
para visualizar um arquivo, SHIFT-TAB
e Alt-l
para voltar para visualizar a lista de arquivos correspondentes ordenados pela melhor correspondência
Pesquise arquivos binários e exiba hexdumps com correspondências de padrões binários (texto Unicode ou -U
para padrões 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
exibe 4
colunas hexadecimais sem uma coluna de caracteres c
, sem espaçamento hexadecimal h
e com uma linha hexadecimal extra C1
antes e depois de uma correspondência.
Inclua arquivos para pesquisar por tipos de arquivo ou "bytes mágicos" de arquivo ou exclua-os com ^
ug -t TYPE PATTERN ... ug -t ^TYPE PATTERN ...
ug -M 'MAGIC' PATTERN ... ug -M '^MAGIC' PATTERN ...
Inclua arquivos e diretórios para pesquisar que correspondam a globs no estilo gitignore ou exclua-os com ^
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 ...
Inclua arquivos para pesquisar por extensões de nome de arquivo (sufixo) ou exclua-os com ^
, uma abreviação de -g"*.EXT"
ug -O EXT PATTERN ... ug -O ^EXT PATTERN ...
Incluir arquivos ocultos (dotfiles) e diretórios para pesquisa (omitidos por padrão)
ug -. PATTERN ... ug -g'.*,.*/' PATTERN ...
especifique hidden
em seu .ugrep para sempre pesquisar arquivos ocultos com ug
.
Exclua arquivos especificados por .gitignore etc.
ug --ignore-files PATTERN ... ug --ignore-files=.ignore PATTERN ...
especifique ignore-files
no seu .ugrep para sempre ignorá-los com ug
. Adicione ignore-files=...
adicionais conforme desejado.
Padrões de pesquisa, excluindo padrões negativos ("correspondem a isto, mas não àquilo")
ug -e PATTERN -N NOTPATTERN ... ug -e '[0-9]+' -N 123 ...
Use padrões regex predefinidos para pesquisar código-fonte, javascript, XML, JSON, HTML, PHP, markdown, etc.
ug PATTERN -f c++/zap_comments -f c++/zap_strings ...
ug PATTERN -f php/zap_html ...
ug -f js/functions ... | ug PATTERN ...
Classifique os arquivos correspondentes por nome, melhor correspondência, tamanho e 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 saída em CSV, JSON, XML e formatos especificados pelo usuário
ug --csv PATTERN ... ug --json PATTERN ...
ug --xml PATTERN ... ug --format='file=%f line=%n match=%O%~' PATTERN ...
ug --help format
exibe ajuda nos campos %
de formato para saída personalizada.
Pesquise com padrões regex compatíveis com Perl do PCRE e exiba ou substitua correspondências de subpadrões
ug -P PATTERN ... ug -P --format='%1 and %2%~' 'PATTERN(SUB1)(SUB2)' ...
Substitua os padrões na saída por texto de substituição -P e --replace, contendo opcionalmente %
campos de formatação, usando -y
para passar o restante do arquivo:
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
exibe ajuda nos campos %
de formato para usar opcionalmente com --replace
.
Pesquise arquivos com um formato de codificação específico, como ISO-8859-1 a 16, CP 437, CP 850, MACROMAN, KOI8, etc.
ug --encoding=LATIN1 PATTERN ...
Instale o ugrep mais recente com Homebrew:
$ brew install ugrep
ou instale com MacPorts:
$ sudo port install ugrep
Isso instala os comandos ugrep
e ug
, onde ug
é o mesmo que ugrep
mas também carrega o arquivo de configuração .ugrep quando presente no diretório de trabalho ou no diretório inicial.
Instalar com Winget winget install Genivia.ugrep
Ou instale com Chocolatey choco install ugrep
Ou instale com Scoop scoop install ugrep
Ou baixe o executável ugrep.exe
completo como artefato de lançamento em https://github.com/Genivia/ugrep/releases. A versão compactada contém o binário principal ugrep.exe
bem como ug.exe
. O comando ug
, destinado ao uso interativo, carrega e lê as configurações do arquivo de configuração .ugrep
(quando presente no diretório de trabalho ou no diretório inicial).
Adicione ugrep.exe
e ug.exe
ao seu caminho de execução: vá para Configurações e pesquise "Caminho" em Encontrar uma configuração . Selecione variáveis de ambiente -> Caminho -> Novo e adicione o diretório onde você colocou os executáveis ugrep.exe
e ug.exe
.
Dica
Dicas práticas sobre como usar ugrep.exe
e ug.exe
na linha de comando do Windows:
'
simples, mas use "
em vez disso; a maioria dos utilitários de comando do Windows considera as aspas '
simples como parte do argumento da linha de comando!-g/GLOB
em vez dos argumentos usuais de linha de comando GLOB
para selecionar arquivos e diretórios para pesquisar, especialmente para pesquisas recursivas;""
para corresponder a todas as entradas, isso pode ser ignorado por alguns interpretadores de comandos do Windows, como o Powershell; nesse caso, você deve especificar a opção --match
;R
vez de n
para corresponder a quaisquer novas linhas Unicode, como rn
pares e únicos r
e n
. $ apk add ugrep ugrep-doc
Verifique https://pkgs.alpinelinux.org/packages?name=ugrep para obter informações sobre a versão.
$ pacman -S ugrep
Verifique https://archlinux.org/packages/extra/x86_64/ugrep para obter informações sobre a versão.
Primeiro habilite o repositório EPEL e então você pode instalar o ugrep.
$ dnf install ugrep
Verifique https://packages.fedoraproject.org/pkgs/ugrep/ugrep/ para informações sobre a versão.
$ apt-get install ugrep
Verifique https://packages.debian.org/ugrep para informações de versão. Para compilar e testar ugrep
localmente, consulte as etapas de compilação de "Todas as plataformas" mais abaixo.
$ dnf install ugrep
Verifique https://packages.fedoraproject.org/pkgs/ugrep/ugrep/ para informações sobre a versão.
$ pkg install ugrep
Verifique https://www.freshports.org/textproc/ugrep para obter informações sobre a versão.
$ pkgman install cmd:ugrep
Verifique https://github.com/haikuports/haikuports/tree/master/app-text/ugrep para obter informações sobre a versão. Para compilar e testar ugrep
localmente, consulte as etapas de compilação de "Todas as plataformas" mais abaixo.
Você pode usar o instalador de pacote padrão do NetBSD (pkgsrc): http://cdn.netbsd.org/pub/pkgsrc/current/pkgsrc/textproc/ugrep/README.html
$ pkg_add ugrep
Verifique https://openports.pl/path/sysutils/ugrep para obter informações sobre a versão.
$ zypper install ugrep
Verifique https://build.opensuse.org/package/show/utilities/ugrep para obter informações sobre a versão.
Primeiro habilite o repositório EPEL e então você pode instalar o ugrep.
$ dnf install ugrep
Verifique https://packages.fedoraproject.org/pkgs/ugrep/ugrep/ para informações sobre a versão.
Clonar ugrep
com
$ git clone https://github.com/Genivia/ugrep
Ou visite https://github.com/Genivia/ugrep/releases para baixar uma versão específica.
Você sempre pode adicioná-los mais tarde, quando precisar destes recursos:
A opção -P
(expressões regulares Perl) requer a biblioteca PCRE2 (recomendada) ou a biblioteca Boost.Regex (substituição opcional). Se o PCRE2 não estiver instalado, instale o PCRE2 com, por exemplo, sudo apt-get install -y libpcre2-dev
ou baixe o PCRE2 e siga as instruções de instalação. Alternativamente, baixe Boost.Regex e execute ./bootstrap.sh
e sudo ./b2 --with-regex install
. Consulte Boost: primeiros passos.
A opção -z
(pesquisa de arquivos compactados e arquivos) requer a biblioteca zlib instalada. Ele está instalado na maioria dos sistemas. Caso contrário, instale-o, por exemplo, com sudo apt-get install -y libz-dev
. Para pesquisar arquivos .bz
e .bz2
, instale a biblioteca bzip2 (recomendado), por exemplo, com sudo apt-get install -y libbz2-dev
. Para pesquisar arquivos .lzma
e .xz
, instale a biblioteca lzma (recomendada), por exemplo, com sudo apt-get install -y liblzma-dev
. Para pesquisar arquivos .lz4
, instale a biblioteca lz4 (opcional, não obrigatória), por exemplo, com sudo apt-get install -y liblz4-dev
. Para pesquisar arquivos .zst
, instale a biblioteca zstd (opcional, não obrigatória), por exemplo, com sudo apt-get install -y libzstd-dev
. Para pesquisar arquivos .br
, instale a biblioteca brotli (opcional, não obrigatória), por exemplo, com sudo apt-get install -y libbrotli-dev
. Para pesquisar arquivos .bz3
, instale a biblioteca bzip3 (opcional, não obrigatória), por exemplo, com sudo apt-get install -y bzip3
.
Dica
Mesmo que o seu sistema possua utilitários de linha de comando, como bzip2
, isso não significa necessariamente que as bibliotecas de desenvolvimento, como libbz2
estejam instaladas. As bibliotecas de desenvolvimento devem ser instaladas.
Alguns sistemas Linux podem não estar configurados para carregar bibliotecas dinâmicas de /usr/local/lib
, causando um erro de carregamento de biblioteca ao executar ugrep
. Para corrigir isso, adicione export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib"
ao seu arquivo ~/.bashrc
. Ou execute sudo ldconfig /usr/local/lib
.
Execute o script ./build.sh
para construir ugrep
:
$ cd ugrep
$ ./build.sh
Isso cria o executável ugrep
no diretório ugrep/src
com ./configure
e make -j
, verificado com make test
. Quando todos os testes forem aprovados, o executável ugrep
será copiado para ugrep/bin/ugrep
e o link simbólico ugrep/bin/ug -> ugrep/bin/ugrep
será adicionado ao comando ug
.
Observe que ug
é igual a ugrep
, mas também carrega o arquivo de configuração .ugrep quando presente no diretório de trabalho ou no diretório inicial. Isso significa que você pode definir suas opções padrão para ug
em .ugrep.
Caminhos alternativos para bibliotecas instaladas ou locais podem ser especificados com ./build.sh
. Para obter ajuda sobre as opções de compilação disponíveis:
$ ./build.sh --help
Você pode criar executáveis estáticos especificando:
$ ./build.sh --enable-static
Isso pode falhar se as bibliotecas não estiverem vinculadas estaticamente, como brotli. Nesse caso, tente ./build.sh --enable-static --without-brotli
.
Você pode construir ugrep
com padrões personalizados habilitados, como um pager:
$ ./build.sh --enable-pager
As opções para selecionar padrões para compilações incluem:
--help
exibe opções de construção--enable-static
cria executáveis estáticos, se possível--enable-hidden
sempre pesquisa arquivos e diretórios ocultos--enable-pager
sempre usa um pager para exibir a saída nos terminais--enable-pretty
colore a saída para terminais e adiciona cabeçalhos de nome de arquivo--disable-auto-color
desabilita cores automáticas, requer a opção ugrep --color=auto
para mostrar cores--disable-mmap
desabilita arquivos mapeados na memória--disable-sse2
desabilita otimizações SSE2 e AVX--disable-avx2
desativa as otimizações AVX2 e AVX512BW, mas compila com SSE2 quando compatível--disable-neon
desabilita otimizações ARM NEON/AArch64--with-grep-path
o caminho padrão -f
se GREP_PATH
não estiver definido--with-grep-colors
as cores padrão se GREP_COLORS
não estiver definido Após a conclusão da compilação, copie ugrep/bin/ugrep
e ugrep/bin/ug
para um local conveniente, por exemplo, em seu diretório ~/bin
. Ou, se você quiser instalar os comandos ugrep
e ug
e as páginas man:
$ sudo make install
Isso também instala os arquivos padrão com padrões predefinidos para a opção -f
em /usr/local/share/ugrep/patterns/
. A opção -f
primeiro verifica o diretório de trabalho quanto à presença de arquivos de padrão, se não for encontrada, verifica a variável de ambiente GREP_PATH
para carregar os arquivos de padrão e, se não for encontrada, lê os arquivos de padrão predefinidos instalados.
Infelizmente, os clones git não preservam carimbos de data/hora, o que significa que você pode encontrar "AVISO: 'aclocal-1.15' está faltando em seu sistema." ou aquele autoheader não foi encontrado ao executar make
.
Para contornar esse problema, execute:
$ autoreconf -fi
$ ./build.sh
GCC 8 e superior podem produzir avisos do tipo "nota: passagem de parâmetro para argumento ... alterado no GCC 7.1" . Esses avisos devem ser ignorados.
Um Dockerfile está incluído para construir ugrep
em um contêiner Ubuntu.
Os desenvolvedores podem querer usar sanitizadores para verificar o código ugrep ao fazer alterações significativas, por exemplo, para detectar disputas de dados com o ThreadSanitizer:
$ ./build.sh CXXFLAGS='-fsanitize=thread -O1 -g'
Verificamos ugrep
com clang AddressSanitizer, MemorySanitizer, ThreadSanitizer e UndefinedBehaviorSanitizer. Essas opções geram sobrecarga significativa no tempo de execução e não devem ser usadas na compilação final.
? Voltar ao índice
Observe que os comandos ugrep e ug pesquisam arquivos binários por padrão e não ignoram os arquivos especificados .gitignore, o que não tornará as comparações de desempenho de pesquisa recursivas significativas, a menos que as opções -I
e --ignore-files
sejam usadas. Para tornar essas opções o padrão para ug , basta adicionar ignore-binary
e ignore-files
ao seu arquivo de configuração .ugrep.
Para uma comparação de desempenho atualizada do ugrep mais recente, consulte os benchmarks de desempenho do ugrep. Ugrep é mais rápido que GNU grep, Silver Searcher, ack, sift. A velocidade do Ugrep supera o ripgrep na maioria dos benchmarks.
Primeiro, vamos definir o comando :grep
no Vim para pesquisar arquivos recursivamente. Para fazer isso, adicione as seguintes linhas ao seu .vimrc
localizado no diretório raiz:
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
Isso especifica pesquisas que não diferenciam maiúsculas de minúsculas -j
com o comando Vim :grep
. Para pesquisas que diferenciam maiúsculas de minúsculas, remova -j
de grepprg
. Múltiplas correspondências na mesma linha são listadas separadamente na janela de correção rápida. Se isso não for desejado, remova -u
do grepprg
. Com esta alteração, apenas a primeira correspondência numa linha é mostrada. A opção --ignore-files
ignora os arquivos especificados nos arquivos .gitignore
, quando presentes. Para limitar a profundidade das pesquisas recursivas apenas ao diretório atual, anexe -1
a grepprg
.
Agora você pode invocar o comando Vim :grep
no Vim para pesquisar arquivos em um PATH
especificado para correspondências PATTERN
:
:grep PATTERN [PATH]
Se você omitir PATH
, o diretório de trabalho será pesquisado. Use %
como PATH
para pesquisar apenas o arquivo atualmente aberto no Vim:
:grep PATTERN %
O comando :grep
mostra os resultados em uma janela de correção rápida que permite pular rapidamente para as correspondências encontradas.
Para abrir uma janela de correção rápida com a lista de correspondências mais recente:
:copen
Clique duas vezes em uma linha nesta janela (ou selecione uma linha e pressione ENTER) para ir para o arquivo e localização no arquivo da correspondência. Digite os comandos :cn
e :cp
para pular para a partida seguinte ou anterior, respectivamente. Para atualizar os resultados da pesquisa na janela do quickfix, basta fazer um grep neles. Por exemplo, para pesquisar recursivamente o código-fonte C++ marcado como FIXME
no diretório de trabalho:
:grep -tc++ FIXME
Para fechar a janela de correção rápida:
:cclose
Você pode usar opções ugrep com o comando :grep
, por exemplo, para selecionar comentários de uma ou várias linhas no arquivo atual:
:grep -f c++/comments %
Apenas a primeira linha de um comentário multilinha é mostrada no quickfix, para economizar espaço. Para mostrar todas as linhas de uma correspondência multilinha, remova %-G
de grepformat
.
Uma ferramenta Vim popular é ctrlp.vim, que é instalada com:
$ cd ~/.vim
$ git clone https://github.com/kien/ctrlp.vim.git bundle/ctrlp.vim
CtrlP usa ugrep adicionando as seguintes linhas ao seu .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
onde -I
ignora arquivos binários, a opção --ignore-files
ignora os arquivos especificados nos arquivos .gitignore
, quando presente, e a opção -3
restringe a pesquisa de diretórios a três níveis (o diretório de trabalho e até dois níveis abaixo).
Inicie o Vim e digite o comando:
:helptags ~/.vim/bundle/ctrlp.vim/doc
Para visualizar a documentação do CtrlP no Vim, digite o comando:
:help ctrlp.txt
? Voltar ao índice
Graças a Manuel Uberti, agora você pode usar o ugrep no Emacs. Para usar ugrep em vez de GNU grep no Emacs, adicione a seguinte linha ao seu arquivo .emacs.d/init.el
:
(setq-default xref-search-program ‘ugrep)
Isso significa que os comandos do Emacs, como project-find-regexp
que dependem do Xref, agora podem aproveitar o poder do ugrep .
Além disso, é possível usar grep
nos comandos grep do Emacs. Por exemplo, você pode executar lgrep
com ugrep
personalizando grep-template
para algo como o seguinte:
(setq-default grep-template "ugrep --color=always -0Iinr -e <R>")
Se você não possui o Emacs versão 29 (ou superior), você pode baixar e construir o Emacs a partir do branch master do Emacs ou ativar a integração do Xref com o 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))
? Voltar ao índice
O ugrep pronto para uso suporta todas as opções de linha de comando grep padrão do GNU/BSD e melhora muitas delas também. Para obter detalhes, consulte melhorias notáveis em relação ao grep.
Se você quiser seguir exatamente os padrões GNU/BSD grep ASCII/LATIN1 não-UTF Unicode, use a opção -U
para desabilitar a correspondência completa de padrões Unicode.
Na verdade, executar ugrep
com as opções -U
, -Y
, -.
e --sort
faz com que ele se comporte exatamente como egrep
, combinando apenas padrões ASCII/LATIN1 não-UTF Unicode, permitindo que padrões vazios correspondam e pesquisem arquivos ocultos em vez de ignorá-los, respectivamente. Veja equivalência grep.
Você pode criar aliases grep convenientes com ou sem opções -U
, -Y
, -.
e --sort
ou inclua outras opções conforme desejado.
Ou você pode criar executáveis grep
, egrep
e fgrep
copiando ugrep
para esses nomes. Quando o executável ugrep
(ou ugrep.exe
) é copiado como grep
( grep.exe
), egrep
( egrep.exe
), fgrep
( fgrep.exe
), então as opções -U
, -Y
e -.
são ativados automaticamente junto com -G
para grep
, -E
para egrep
e -F
para fgrep
. Além disso, quando copiado como zgrep
, zegrep
e zfgrep
, a opção -z
está habilitada. Por exemplo, quando ugrep
é copiado como zegrep
, as opções -z
, -E
, -Y
, -.
e --sort
estão habilitados.
Da mesma forma, links simbólicos e links físicos para ugrep
também funcionam bem para criar substituições grep
, egrep
e fgrep
. Por exemplo, para criar um link simbólico egrep
:
sudo ln -s `which ugrep` /opt/local/bin/egrep
O /opt/local/bin
é apenas um exemplo e pode ou não estar no seu $path
e pode ou não ser encontrado ao executar egrep
dependendo do seu $path
.
ugrep é equivalente ao GNU/BSD grep quando as seguintes opções são usadas:
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
onde:
-U
desativa a correspondência de padrões de caracteres largos Unicode, portanto, por exemplo, o padrão xa3
corresponde ao byte A3 em vez do ponto de código Unicode U+00A3 representado pela sequência UTF-8 C2 A3. Por padrão no ugrep, xa3
corresponde a U+00A3. Não recomendamos usar -U
para pesquisas de padrões de texto, apenas para pesquisas binárias ou para pesquisar arquivos latin-1 (iso-8859-1) sem reportar esses arquivos como binários (desde ugrep v3.5.0).-Y
permite correspondências vazias, por exemplo, o padrão a*
corresponde a cada linha em vez de uma sequência de a
's. Por padrão no ugrep, o padrão a*
corresponde a uma sequência de a
's. Além disso, em ugrep o padrão a*b*c*
corresponde ao que deveria corresponder por padrão. Veja melhorias.-.
pesquisa arquivos ocultos (dotfiles). Por padrão, os arquivos ocultos são ignorados, como a maioria dos utilitários Unix.--sort
especifica a saída classificada por nome do caminho, mostrando primeiro os arquivos correspondentes classificados, seguidos por correspondências recursivas classificadas em subdiretórios. Caso contrário, os arquivos correspondentes serão relatados sem nenhuma ordem específica para melhorar o desempenho;-Dread
e -dread
são os padrões grep do GNU/BSD, mas não são recomendados, veja melhorias para uma explicação.? Voltar ao índice
Aliases comumente usados para adicionar ao .bashrc
para aumentar a produtividade:
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)
? Voltar ao índice
-Q
.n
.-U
).--bool
).--ignore-files
.-Z
.-z
.-z
.-z
e --zmax=NUM
para até NUM
níveis de profundidade.--filter
usando utilitários de conversão de formato de terceiros como plug-ins.-r
para pesquisar diretórios recursivamente.-.
).-E
como egrep, enquanto -G
habilita BRE).-J1
).-W
(saída de correspondências binárias em hexadecimal com texto correspondente à saída como de costume) e -X
(saída de todas as correspondências em hexadecimal).--format
).-f
usa a variável de ambiente GREP_PATH
ou os padrões predefinidos instalados em /usr/local/share/ugrep/patterns
. Se -f
for especificado e também um ou mais padrões -e
forem especificados, então as opções -F
, -x
e -w
não se aplicam aos padrões -f
. Isto evita confusão quando -f
é usado com padrões predefinidos que podem não funcionar mais corretamente com essas opções.-O
, -M
e -t
especificam extensões de arquivo, padrões de bytes mágicos de assinatura de arquivo e tipos de arquivo predefinidos, respectivamente. Isso permite pesquisar certos tipos de arquivos em árvores de diretórios, por exemplo, com opções de pesquisa recursiva -R
e -r
. As opções -O
, -M
e -t
também se aplicam a arquivos arquivados em arquivos cpio, jar, pax, tar, zip e 7z.-k
, --column-number
para exibir o número da coluna, levando em consideração o espaçamento entre tabulações, expandindo as tabulações, conforme especificado pela opção --tabs
.-P
(expressões regulares Perl) suporta referências anteriores (com --format
) e lookbehinds, que usa a biblioteca PCRE2 ou Boost.Regex para correspondência rápida de regex Perl com uma sintaxe semelhante a PCRE.-b
com a opção -o
ou com a opção -u
, ugrep exibe o deslocamento exato de bytes da correspondência de padrão em vez do deslocamento de bytes do início da linha correspondente relatado pelo GNU/BSD grep.-u
, --ungroup
para não agrupar várias correspondências por linha. Esta opção exibe uma linha de entrada correspondente novamente para cada correspondência de padrão adicional na linha. Esta opção é particularmente útil com a opção -c
para relatar o número total de correspondências de padrões por arquivo em vez do número de linhas correspondidas por arquivo.-Y
permite a correspondência de padrões vazios. Grepping com padrões de correspondência vazia é estranho e fornece resultados diferentes com GNU grep versus BSD grep. Correspondências vazias não são geradas pelo ugrep por padrão, o que evita erros que podem produzir resultados "aleatórios". Por exemplo, com GNU/BSD grep, o padrão a*
corresponde a cada linha na entrada e, na verdade, corresponde xyz
três vezes (as transições vazias antes e entre x
, y
e z
). Permitir correspondências vazias requer a opção ugrep -Y
. Padrões que começam com ^
ou terminam com $
, como ^h*$
, correspondem a vazios. Esses padrões ativam automaticamente a opção -Y
.-D, --devices=ACTION
é skip
por padrão, em vez de read
. Isso evita a suspensão inesperada de pipes nomeados em diretórios que são pesquisados recursivamente, como pode acontecer com o grep GNU/BSD que read
dispositivos por padrão.-d, --directories=ACTION
é skip
por padrão, em vez de read
. Por padrão, os diretórios especificados na linha de comando são pesquisados, mas não de forma recursiva nos subdiretórios.-N PATTERN
, que são padrões no formato (?^X)
que ignoram todas as entradas X
, removendo assim X
da pesquisa. Por exemplo, padrões negativos podem ser usados para pular strings e comentários ao pesquisar identificadores no código-fonte e encontrar correspondências que não estão em strings e comentários. Os padrões zap
predefinidos usam padrões negativos, por exemplo, use -f cpp/zap_comments
para ignorar correspondências de padrões em comentários C++.GREP_OPTIONS
, porque o comportamento do ugrep deve ser portátil e previsível em todos os sistemas. Além disso, o GNU grep abandonou GREP_OPTIONS
por esse motivo. Use o comando ug
que carrega o arquivo de configuração .ugrep localizado no diretório de trabalho ou no diretório inicial, quando presente, ou use aliases de shell para criar novos comandos com opções de pesquisa específicas.? Voltar ao índice
Para realizar uma pesquisa usando um arquivo de configuração .ugrep
colocado no diretório de trabalho ou no diretório inicial (observe que ug
é o mesmo que ugrep --config
):
ug PATTERN FILE...
Para salvar um arquivo de configuração .ugrep
no diretório de trabalho, edite esse arquivo em seu diretório inicial para personalizar suas preferências para os padrões ug
:
ug --save-config
Para pesquisar o diretório de trabalho e recursivamente mais profundamente para main
(observe que -r
recurse symlinks é habilitado por padrão se nenhum argumento de arquivo for especificado):
ug main
O mesmo, mas pesquise apenas arquivos de código-fonte C++ recursivamente, ignorando todos os outros arquivos:
ug -tc++ main
O mesmo, usando a consulta interativa TUI, começando com o padrão de pesquisa inicial main
(observe que -Q
com um padrão inicial requer a opção -e
porque os padrões são normalmente especificados interativamente e todos os argumentos da linha de comando são considerados arquivos/diretórios):
ug -Q -tc++ -e main
Para procurar #define
(e # define
etc) usando um padrão regex em arquivos C++ (observe que os padrões devem ser citados para evitar globbing de shell de *
e ?
):
ug -tc++ '#[t ]*define'
Para pesquisar main
como uma palavra ( -w
) recursivamente sem seguir links simbólicos ( -r
) no diretório myproject
, mostrando os números de linha ( -n
) e coluna ( -k
) correspondentes próximos às linhas correspondentes:
ug -r -nkw main myproject
O mesmo, mas pesquise apenas myproject
sem recorrer mais profundamente (observe que os argumentos do diretório são pesquisados em um nível por padrão):
ug -nkw main myproject
O mesmo, mas pesquise myproject
e um nível de subdiretório mais profundo (dois níveis) com -2
:
ug -2 -nkw main myproject
O mesmo, mas pesquise apenas arquivos C++ em myproject
e seus subdiretórios com -tc++
:
ug -tc++ -2 -nkw main myproject
O mesmo, mas também pesquise dentro de arquivos (por exemplo, arquivos zip e tar) e arquivos compactados com -z
:
ug -z -tc++ -2 -nkw main myproject
Pesquise recursivamente o diretório de trabalho por main
enquanto ignora os arquivos gitignored (por exemplo, assumindo que .gitignore
esteja no diretório de trabalho ou abaixo):
ug --ignore-files -tc++ -nkw main
Para listar todos os arquivos no diretório de trabalho e mais profundos que não são ignorados pelos arquivos .gitignore
:
ug --ignore-files -l ''
Para exibir a lista de extensões de nome de arquivo e "bytes mágicos" (shebangs) que são pesquisados correspondentes aos argumentos -t
:
ug -tlist
Para listar todos os arquivos shell recursivamente, com base em extensões e shebangs com -l
(observe que ''
corresponde a qualquer arquivo não vazio):
ug -l -tShell ''
? Voltar ao índice
Para pesquisar main
no código-fonte enquanto ignora strings e blocos de comentários, você pode usar padrões negativos com a opção -N
para pular correspondências indesejadas em strings entre aspas e blocos de comentários em C/C++:
ug -r -nkw -e 'main' -N '"(\.|\r?n|[^\n"])*"|//.*|/*(.*n)*?.**+/' myproject
É muito trabalhoso digitar corretamente! Se você for como eu, não quero perder tempo brincando com padrões de regex quando estiver trabalhando em algo mais importante. Existe uma maneira mais fácil usando os padrões predefinidos ( -f
) do Ugrep que são instalados com a ferramenta ugrep
:
ug -r -nkw 'main' -f c/zap_strings -f c/zap_comments myproject
Esta consulta também pesquisa em outros arquivos que não o código -fonte C/C ++, como ReadMes, Makefiles e assim por diante. Também estamos pulando symblinks com -r
. Então, vamos refinar esta consulta selecionando arquivos C/C ++ apenas usando opção -tc,c++
e incluir symblinks em arquivos e diretórios com -R
:
ug -R -tc,c++ -nkw 'main' -f c/zap_strings -f c/zap_comments myproject
E se você quiser procurar apenas o identificador main
, mas não como uma função main(
? Nesse caso, use um padrão negativo para que isso pular para mainh*(
padrão corresponde:
ug -R -tc,c++ -nkw -e 'main' -N 'mainh*(' -f c/zap_strings -f c/zap_comments myproject
Isso usa as opções -e
e -N
para especificar explicitamente um padrão e um padrão negativo, respectivamente, que está essencialmente formando o padrão main|(?^mainh*()
, onde h
corresponde ao espaço e na guia. Em geral , padrões negativos são úteis para filtrar correspondências de padrões nas quais não estamos interessados.
Como outro exemplo, digamos que queremos procurar o Word FIXME
em blocos de comentários C/C ++. Para isso, podemos primeiro selecionar os blocos de comentários com o padrão c/comments
predefinidos do Ugrep e depois selecionar linhas com FIXME
usando um tubo:
ug -R -tc,c++ -nk -f c/comments myproject | ug -w 'FIXME'
Os resultados da filtragem com os tubos geralmente são mais fáceis do que usar e a lógica ou que algumas ferramentas de pesquisa usam. Essa abordagem segue o espírito Unix para simplificar os utilitários e usá -los em combinação para tarefas mais complexas.
Vamos produzir uma lista classificada de todos os identificadores encontrados no código -fonte do Java enquanto pulava strings e comentários:
ug -R -tjava -f java/names myproject | sort -u
Isso corresponde aos identificadores Java Unicode usando o regex p{JavaIdentifierStart}p{JavaIdentifierPart}*
definido em patterns/java/names
.
Com as ferramentas tradicionais do tipo grep e grep, é necessário um grande esforço para procurar recursivamente o arquivo de origem C/C ++ que define o qsort
da função, exigindo algo assim:
ug -R --include='*.c' --include='*.cpp' '^([ t]*[[:word:]:*&]+)+[ t]+qsort[ t]*([^;n]+$' myproject
Felizmente, com o Ugrep, podemos simplesmente selecionar todas as definições de função em arquivos com extensão .c
ou .cpp
usando opção -Oc,cpp
e usando functions
de padrão predefinido instaladas com a ferramenta para produzir todas as definições de função. Então selecionamos o que queremos:
ug -R -Oc,cpp -nk -f c/functions | ug 'qsort'
Observe que poderíamos ter usado -tc,c++
para selecionar arquivos C/C ++, mas isso também inclui arquivos de cabeçalho quando queremos pesquisar apenas arquivos .c
e .cpp
.
Também podemos pular arquivos e diretórios de serem pesquisados que estão definidos no .gitignore
. Para fazer isso, usamos --ignore-files
para excluir quaisquer arquivos e diretórios de pesquisas recursivas que correspondam aos globs no .gitignore
, quando um ou mais arquivos .gitignore
são encontrados:
ug -R -tc++ --ignore-files -f c++/defines
Isso pesquisa arquivos C ++ ( -tc++
) no diretório de trabalho das linhas #define
( -f c++/defines
), enquanto ignorava arquivos e diretórios declarados no .gitignore
. Se você achar isso muito tempo para digitar, defina um alias para pesquisar diretórios do GitHub:
alias ugit='ugrep -R --ignore-files'
ugit -tc++ -f c++/defines
Para destacar as partidas quando empurradas através de uma cadeia de tubos, devemos usar --color=always
:
ugit --color=always -tc++ -f c++/defines | ugrep -w 'FOO.*'
Isso retorna uma lista bem iluminada de todas as macros #define FOO...
em arquivos de código-fonte C/C ++, pulando arquivos definidos no .gitignore
.
Observe que o complemento de --exclude
não é --include
, porque as exclusões sempre têm precedência sobre inclusões; portanto, não podemos listar com segurança os arquivos que são ignorados com --include-from='.gitignore'
. Somente arquivos especificados explicitamente com --include
e os diretórios especificados explicitamente com --include-dir
são visitados. O --include-from
do Lists Globs que são considerados arquivos e diretórios a serem adicionados a --include
e --include-dir
, respectivamente. Isso significa que, quando os nomes de diretórios e os caminhos de diretório não são listados explicitamente neste arquivo, ele não será visitado usando --include-from
.
Como o Ugrep verifica se a entrada é válida unicode codificada por UTF (a menos que -U
seja usado), é possível usá-lo como um filtro para ignorar a saída não-UTF produzida por um programa:
program | ugrep -I ''
Se o programa produzir uma saída válida, a saída será passada, caso contrário, a saída será filtrada opção -I
. Se a saída for inicialmente válida para uma parte muito grande, mas for seguida pela saída inválida, o UGREP poderá mostrar inicialmente a saída até, mas excluindo a saída inválida após a qual a saída adicional é bloqueada.
Filtrar linhas que são codificadas por ASCII ou UTF válidas, enquanto remove as linhas que não são:
program | ugrep '[p{Unicode}--[n]]+'
Observe que p{Unicode}
corresponde a n
, mas não queremos combinar o arquivo inteiro! Apenas linhas com [p{Unicode}--[n]]+
.
? Voltar para o índice
A página do homem do Ugrep:
man ugrep
Para mostrar uma página de ajuda:
ug --help
Para mostrar opções que mencionam WHAT
:
ug --help WHAT
Para mostrar uma lista dos valores de opção -t TYPES
:
ug -tlist
Na consulta interativa TUI, pressione F1 ou Ctrl-Z para obter ajuda e opções:
ug -Q
? Voltar para o índice
--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.
O comando ug
destina-se à pesquisa interativa dependente do contexto e é equivalente ao comando ugrep --config
para carregar o arquivo de configuração .ugrep
quando presente no diretório de trabalho ou, quando não for encontrado, no diretório doméstico:
ug PATTERN ...
ugrep --config PATTERN ...
O comando ug
também classifica os arquivos por nome por diretório pesquisado. Um arquivo de configuração contém NAME=VALUE
por linha, onde NAME
é o nome de uma opção longa (sem --
) e =VALUE
é um argumento, que é opcional e pode ser omitido, dependendo da opção. Linhas e linhas vazias começando com um #
são ignoradas:
# 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
As opções da linha de comando são analisadas na seguinte ordem: Primeiro, o arquivo de configuração (padrão ou nomeado) é carregado, depois as opções e argumentos restantes na linha de comando são analisados.
Opção --stats
Exibe o arquivo de configuração usado após a pesquisa.
Os arquivos de configuração nomeados destinam-se a otimizar tarefas de pesquisa personalizadas, reduzindo o número de opções de linha de comando para apenas um ---FILE
para usar a coleta de opções especificadas no FILE
. A opção --config=FILE
e seu formulário abreviado ---FILE
carregam o arquivo de configuração especificada localizada no diretório de trabalho ou, quando não encontrado, localizado no diretório doméstico:
ug ---FILE PATTERN ...
ugrep ---FILE PATTERN ...
Um erro é produzido quando FILE
não é encontrado ou não pode ser lido.
Os arquivos de configuração nomeados podem ser usados para definir uma coleção de opções específicas para os requisitos de uma tarefa no fluxo de trabalho de desenvolvimento de um projeto. Por exemplo, para relatar problemas não resolvidos, verificando o código -fonte e a documentação para comentários com itens FixMe e TODO. Esse arquivo de configuração nomeado pode ser localizado em um projeto, colocando -o no diretório do projeto, ou pode ser tornado global colocando -o no diretório doméstico. Para feedback visual, um esquema de cores específico para esta tarefa pode ser especificado com colors
da opção no FILE
configuração para ajudar a identificar a saída produzida por uma configuração nomeada em oposição à configuração padrão.
A opção --save-config
salva um arquivo de configuração .ugrep
no diretório de trabalho usando a configuração atual carregada com --config
. Isso salva a configuração atual combinada com opções adicionais quando especificada também. Somente as opções que não podem entrar em conflito com outras opções e opções que não podem impactar negativamente os resultados da pesquisa serão salvos.
A opção --save-config=FILE
salva a configuração no FILE
especificado. A configuração é gravada na saída padrão quando FILE
é a -
.
Como alternativa, um arquivo de configuração pode ser criado manualmente ou modificado. Um arquivo de configuração pode incluir um ou mais config[=FILE]
para carregar indiretamente o FILE
especificado, mas é proibido o carregamento de configuração recursiva. A maneira mais simples de fabricar um arquivo de configuração é especificar config
na parte superior do arquivo, seguida pelas longas opções para substituir os padrões.
? Voltar para o índice
-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 opção inicia uma interface do usuário para inserir padrões de pesquisa interativamente:
-c
contagem de correspondências. Pressionar Alt -C novamente desativa -c
. As opções podem ser alternadas com a tecla Alt enquanto pesquisam ou ao visualizar a tela de ajuda. Se as teclas Alt/Meta não forem suportadas (por exemplo, x11 xterm), pressione Ctrl-O seguido pela tecla correspondente à opção.-g
e o diretório Matching Globs, uma lista separada por vírgula dos padrões globais no estilo Gitignore. Pressioning ESC retorna o controle do prompt de padrão de consulta (os globs são salvos). Quando um globo é precedido por A !
ou a ^
, pula os arquivos cujo nome corresponde ao glob quando um glob contém /
de caminho completos são correspondidos. Caso contrário, os nomes de basenas são correspondidos. Quando um glob termina com A /
, os diretórios são comparados.Q>
(normal), F>
(cadeias fixas), G>
(regex básico), P>
(correspondência perl) e Z>
(correspondência difusa). Quando o prompt --glob=
é mostrado, uma lista separada por vírgula dos padrões globais no estilo Gitignore pode ser inserida. Pressionar ESC retorna o controle do prompt de padrão.--view
.--view=COMMAND
. Caso contrário, as variáveis de ambiente PAGER
ou EDITOR
são usadas para invocar o comando com Ctrl-Y. Os nomes de arquivos devem ser ativados e visíveis na saída para usar esse recurso.--color
.DELAY
como 1. No entanto, valores mais baixos podem aumentar a carga do sistema como resultado de iniciar e cancelar pesquisas repetidamente por cada tecla pressionada.--heading
é ativado por padrão. Pressione Alt-+ para desligar os títulos.Consulta o mapeamento de chaves tui:
Chave (s) | função |
---|---|
Alt-key | alternar a opção de linha de comando ugrep correspondente à key |
Alt-/ xxxx / | Insira Unicode Código HEX PONTO U+XXXX |
Esc Ctrl-C | Voltar ou sair |
Ctrl-Q | saída rápida e saída dos resultados selecionados no modo de seleção |
Tab | Chdir para o diretório do arquivo mostrado na parte superior da tela ou selecione Arquivo |
Shift-Tab | Chdir One Level Up ou desmarcar arquivo |
Enter | Digite o modo de seleção e alterne as linhas selecionadas para a saída na saída |
Up Ctrl-P | subir |
Down Ctrl-N | descer |
Ctrl-B Left | mover para a esquerda |
Ctrl-F Right | mova para a direita |
PgUp Ctrl-G | Mova a exibição por uma página |
PgDn Ctrl-D | Mova a exibição para baixo por uma página |
Alt-Up | Mova a exibição em 1/2 página (MacOS Shift-Up ) |
Alt-Down | Mova a exibição para baixo por 1/2 página (MacOS Shift-Down ) |
Alt-Left | Mova o visor esquerdo por 1/2 página (MacOS Shift-Left ) |
Alt-Right | Mova a exibição direita por 1/2 página (MacOS Shift-Right ) |
Home Ctrl-A | Mova o cursor para o início da linha |
End Ctrl-E | Mova o cursor para o final da linha |
Ctrl-K | Exclua depois do cursor |
Ctrl-L | Tela de atualização |
key Ctrl-O + | alterne a opção de linha de comando ugrep correspondente à key , igual à Alt-key |
Ctrl-R F4 | Salte para o favorito |
Ctrl-S | Salte para o próximo dir/arquivo/contexto |
Ctrl-T F5 | Tecla de alternância ( --split inicia um tui de tela dividida) |
Ctrl-U | Exclua antes do cursor |
Ctrl-V | personagem literal |
Ctrl-W | Voltar para trás um dir/arquivo/contexto |
Ctrl-X F3 | Conjunto de marcadores |
Ctrl-Y F2 | visualizar ou editar o arquivo mostrado na parte superior da tela |
Ctrl-Z F1 | Ver ajuda e opções |
Ctrl-^ | chdir de volta ao diretório de trabalho inicial |
Ctrl-] | Alterne a cor/mono |
Ctrl- | terminar o processo |
Para pesquisar interativamente os arquivos no diretório de trabalho e abaixo:
ug -Q
O mesmo, mas restrito apenas a arquivos C ++ e ignorando arquivos .gitignore
:
ug -Q -tc++ --ignore-files
Para pesquisar interativamente todos os modos no diretório de trabalho e abaixo:
ug -Q -g 'Makefile*' -g 'makefile*'
O mesmo, mas para até 2 níveis de diretório (funcionando e um nível de subdiretório):
ug -Q -2 -g 'Makefile*' -g 'makefile*'
Para visualizar interativamente o conteúdo do main.cpp
e pesquisá -lo, onde -y
mostra quaisquer linhas que não sejamtem como contexto:
ug -Q -y main.cpp
Para pesquisar interativamente main.cpp
, começando com o padrão de pesquisa TODO
e um contexto de correspondência de 5 linhas (o contexto pode ser ativado e desativado interativamente, isso também substitui o tamanho do contexto padrão de 2 linhas):
ug -Q -C5 -e TODO main.cpp
Para visualizar e pesquisar o conteúdo de um arquivo (por exemplo, zip, tarball):
ug -Q -z archive.tar.gz
Para selecionar interativamente os arquivos do project.zip
para descomprimir com unzip
, usando o modo de seleção de consulta do Ugrep (pressione Enter para selecionar linhas):
unzip project.zip `zipinfo -1 project.zip | ugrep -Q`
? Voltar para o índice
-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.
Se nenhum argumento de arquivo for especificado e a entrada for lida em um terminal, as pesquisas recursivas serão executadas como se -r
fosse especificado. Para forçar a leitura da entrada padrão, especifique -
como o argumento do arquivo.
Para listar recursivamente todos os arquivos não vazios no diretório de trabalho:
ug -r -l ''
Para listar todos os arquivos não vazios no diretório de trabalho, mas não mais profundo (já que um argumento de arquivo é fornecido, neste caso .
Para o diretório de trabalho):
ug -l '' .
Para listar todos os arquivos não vazios no diretório mydir
, mas não mais profundo (já que um argumento de arquivo é fornecido):
ug -l '' mydir
Para listar todos os arquivos não vazios no diretório mydir
e mais profundamente, seguindo symblinks:
ug -R -l '' mydir
Para listar recursivamente todos os arquivos não vazios no caminho especificado, ao visitar apenas subdiretos, ou seja, diretórios mydir/
e subdiretórios em um nível mais profundo mydir/*/
são visitados (observe que -2 -l
pode ser abreviado para -l2
):
ug -2 -l '' mydir
Para listar recursivamente todos os arquivos não vazios no diretório mydir
, sem seguir links simbólicos (exceto quando na linha de comando como mydir
):
ug -rl '' mydir
Para listar recursivamente todos os modos que correspondem ao texto CPP
:
ug -l -tmake 'CPP'
Para listar recursivamente todos Makefile.*
Combinando bin_PROGRAMS
:
ug -l -g'Makefile.*' 'bin_PROGRAMS'
Para listar recursivamente todos os arquivos não vazios com extensão .sh, com -Osh
:
ug -l -Osh ''
Para listar recursivamente todos os scripts de shell com base em extensões e shebangs com -tShell
:
ug -l -tShell ''
Para listar recursivamente todos os scripts de shell com base em extensões apenas com -tshell
:
ug -l -tshell ''
? Voltar para o índice
--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.
Observe que as opções --and
, --not
e --andnot
requerem -e PATTERN
.
A opção -%
faz com que todos os padrões sejam baseados em booleanos, apoiando as seguintes operações lógicas listadas do nível mais alto de precedência ao menor:
operador | alternativa | resultado |
---|---|---|
"x" | Combine x literalmente e exatamente como especificado (usando as escapadas de regex padrão Q e E ) | |
( ) | Agrupamento de expressão booleana | |
-x | NOT x | partida invertida, ou seja, corresponde se x não corresponder |
x|y | x OR y | combina linhas com x ou y |
xy | x AND y | combina linhas com x e y |
x
e y
são subpadras que não começam com os símbolos especiais |
, -
e (
(use citações ou escape para corresponder a elas);
-
NOT
são iguais e precedência sobre OR
, o que significa que -x|y
== (-x)|y
por exemplo.
|
e OR
são iguais e precedem AND
, o que significa que xy|z
== x (y|z)
por exemplo;
A opção --stats
exibe as consultas booleanas na forma legível pelo homem convertida em CNF (forma normal conjuntiva), após a conclusão da pesquisa. Para mostrar o CNF sem pesquisa, leia a partir de entrada padrão terminada por um EOF, como echo | ugrep -% '...' --stats
.
Os subpadrões são bem iluminados na saída, exceto aqueles negados com NOT
(um NOT
subpaterno ainda pode aparecer em uma linha correspondente ao usar um padrão ou não ou não como x|-y
). Observe que os subpadrões podem se sobrepor. Nesse caso, apenas o primeiro subpadrão de correspondência é bem iluminado por cores.
Várias linhas podem ser correspondidas quando os subpadras correspondem às novas linhas. No entanto, há uma exceção: os subpadras terminando com (?=X)
lookaheads podem não corresponder quando X
abrange várias linhas.
Padrões vazios correspondem a qualquer linha (padrão grep). Portanto, -% 'x|""|y'
corresponde tudo e x
e y
não são bem iluminados por cores. A opção -y
deve ser usada para mostrar todas as linhas como contexto, por exemplo -y 'x|y'
.
Consulta interativa do tipo FZF (pesquisa booleana com strings fixos com correspondência difusa para permitir, por exemplo, até 4 caracteres extras combinados com -Z+4
em palavras com -w
), pressione a guia e alt -y para visualizar um arquivo com correspondências. Pressione Shift-Tab e Alt-L para voltar à lista de arquivos correspondentes:
ug -Q -%% -l -w -F -Z+4 --sort=best
Para encontrar recursivamente todos os arquivos que contêm o hot
e dog
em qualquer lugar do arquivo com opção --files
:
ug -%% 'hot dog'
ug --files -e hot --and dog
Para encontrar linhas contendo hot
e dog
em myfile.txt
:
ug -% 'hot dog' myfile.txt
ug -e hot --and dog myfile.txt
Para encontrar linhas que contêm place
e também hotdog
ou taco
(ou ambos) em myfile.txt
:
ug -% 'hotdog|taco place' myfile.txt
ug -e hotdog -e taco --and place myfile.txt
Mesmo, mas exclua linhas combinando diner
:
ug -% 'hotdog|taco place -diner' myfile.txt
ug -e hotdog -e taco --and place --andnot diner myfile.txt
Para encontrar linhas com diner
ou linhas que correspondam fast
e com food
, mas não bad
no myfile.txt
:
ug -% 'diner|(fast food -bad)' myfile.txt
Para encontrar linhas com fast food
(exatamente) ou linhas com diner
, mas não bad
ou old
em myfile.txt
:
ug -% '"fast food"|diner -bad -old' myfile.txt
O mesmo, mas usando uma expressão booleana diferente que tem o mesmo significado:
ug -% '"fast food"|diner -(bad|old)' myfile.txt
Para encontrar linhas com diner
implicando good
no myfile.txt
(ou seja, mostrar linhas com good
sem diner
e mostrar linhas com diner
, mas apenas aqueles com good
, que está logicamente implícito!):
ug -% 'good|-diner' myfile.txt
ug -e good --not diner myfile.txt
Para encontrar linhas com foo
e -bar
e "baz"
em myfile.txt
(não isso -
"
devem ser correspondidos usando escapes e com
--and -e -bar
):
ug -% 'foo -bar "baz"' myfile.txt
ug -e foo --and -e -bar --and '"baz"' myfile.txt
Para pesquisar myfile.cpp
por linhas com TODO
ou FIXME
, mas não ambos na mesma linha, como XOR:
ug -% 'TODO|FIXME -(TODO FIXME)' myfile.cpp
ug -e TODO -e FIXME --and --not TODO --not FIXME myfile.cpp
? Voltar para o índice
-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 $.
Veja também padrões de consulta booleanos com -%, -%%, e, -não para opções de consulta booleanas mais poderosas do que as opções tradicionais de GNU/BSD Grep.
Para exibir linhas no arquivo myfile.sh
, mas não linhas correspondentes ^[ t]*#
:
ug -v '^[ t]*#' myfile.sh
Para pesquisar myfile.cpp
por linhas com FIXME
e urgent
, mas não Scotty
:
ugrep FIXME myfile.cpp | ugrep urgent | ugrep -v Scotty
O mesmo, mas usando -%
para consultas booleanas:
ug -% 'FIXME urgent -Scotty' myfile.cpp
Para procurar decimais usando padrão d+
que não começam com 0
usando o padrão negativo 0d+
e excluindo 555
:
ug -e 'd+' -N '0d+' -N 555 myfile.cpp
Para procurar palavras que começam com disp
sem corresponder display
no arquivo myfile.py
usando um "padrão negativo" -N '/<display>'
onde -N
especifica um padrão negativo adicional para pular correspondências:
ug -e '<disp' -N '<display>' myfile.py
Para procurar linhas com a display
da palavra no arquivo myfile.py
pulando essa palavra em strings e comentários, onde -f
especifica padrões em arquivos que são padrões predefinidos neste caso:
ug -n -w 'display' -f python/zap_strings -f python/zap_comments myfile.py
Para exibir linhas que não são linhas em branco:
ug -x -e '.*' -N 'h*' myfile.py
O mesmo, mas usando -v
e -x
com h*
, ou seja, padrão ^h*$
:
ug -v -x 'h*' myfile.py
Para listar recursivamente todos os arquivos Python que não contêm a display
do Word, permitindo que a palavra ocorra em strings e comentários:
ug -RL -tPython -w 'display' -f python/zap_strings -f python/zap_comments
? Voltar para o índice
--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.)
Os arquivos binários, ASCII e UTF-8 não exigem essa opção para pesquisá-los. Além disso, os arquivos UTF-16 e UTF-32 não exigem essa opção para pesquisá-los, assumindo que os arquivos UTF-16 e UTF-32 começam com um BOM UTF (marca de pedidos de byte) como de costume. Outras codificações de arquivo requerem opção --encoding=ENCODING
:
codificação | parâmetro |
---|---|
ASCII | n / D |
UTF-8 | n / D |
UTF-16 com Bom | n / D |
UTF-32 com Bom | n / D |
UTF-16 seja sem nascer | UTF-16 ou UTF-16BE |
UTF-16 LE W/O BOM | UTF-16LE |
UTF-32 sem nascer | UTF-32 ou UTF-32BE |
UTF-32 sem nascer | UTF-32LE |
Latin-1 | LATIN1 ou 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 do Windows Página 1250 | CP1250 |
Código do Windows Página 1251 | CP1251 |
Código do Windows Página 1252 | CP1252 |
Código do Windows Página 1253 | CP1253 |
Código do Windows Página 1254 | CP1254 |
Código do Windows Página 1255 | CP1255 |
Código do Windows Página 1256 | CP1256 |
Código do Windows Página 1257 | CP1257 |
Código do Windows Página 1258 | CP1258 |
KOI8-R | KOI8-R |
Koi8-U | KOI8-U |
KOI8-RU | KOI8-RU |
Observe que os padrões REGEX são sempre especificados no UTF-8 (inclui ASCII). Para pesquisar arquivos binários com padrões binários, consulte pesquisar e exibir arquivos binários com -u, -w e -x.
Para listar recursivamente todos os arquivos que são ASCII (ou seja, 7 bits):
ug -L '[^[:ascii:]]'
Para listar recursivamente todos os arquivos não-ASCII, ou seja, arquivos UTF-8, UTF-16 e UTF-32 com caracteres não-ASCII Unicode (U+0080 e UP):
ug -l '[^[:ascii:]]'
Para verificar se um arquivo contém unicode não-ASCII (U+0080 e UP):
ug -q '[^[:ascii:]]' myfile && echo "contains Unicode"
Para remover os caracteres Unicode inválidos de um arquivo (observe que -o
pode não funcionar porque os dados binários são detectados e rejeitados e as linhas de novo são adicionadas, mas --format="%o%
não verifica o binário e copia a correspondência" como está " ):
ug "[p{Unicode}n]" --format="%o" badfile.txt
Para listar recursivamente os arquivos com conteúdo UTF inválido (ou seja, sequências ou arquivos inválidos de UTF-8 bytes que contêm quaisquer pontos de código UTF-8/16/32 que estejam fora do intervalo unicode válido) correspondendo a qualquer ponto de código com .
e usando um padrão negativo -N 'p{Unicode}'
para ignorar cada caractere unicode válido:
ug -l -e '.' -N 'p{Unicode}'
Para exibir linhas contendo emojis de rosto rindo:
ug '[?-?]' emojis.txt
Os mesmos resultados são obtidos usando x{hhhh}
para selecionar um intervalo de caracteres Unicode:
ug '[x{1F600}-x{1F60F}]' emojis.txt
Para exibir linhas que contêm os nomes Gödel (ou Goedel), Escher ou Bach:
ug 'G(ö|oe)del|Escher|Bach' GEB.txt wiki.txt
Para procurar lorem
em minúsculas ou maiúsculas em um arquivo UTF-16 marcado com um Bom UTF-16:
ug -iw 'lorem' utf16lorem.txt
Para pesquisar UTF16lorem.txt quando este arquivo não tem Bom UTF-16, usando --encoding
:
ug --encoding=UTF-16 -iw 'lorem' utf16lorem.txt
Para pesquisar o arquivo spanish-iso.txt
codificado na ISO-8859-1:
ug --encoding=ISO-8859-1 -w 'año' spanish-iso.txt
? Voltar para o índice
-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.
Várias linhas podem ser correspondidas por padrões que correspondem aos caracteres da Newline. Use a opção -o
para produzir apenas a correspondência, não as linhas completas que correspondem.
Para corresponder a uma quebra de linha n
, inclua n
no padrão para corresponder ao caractere LF. Se você deseja corresponder às quebras da linha rn
e n
, use r?n
ou simplesmente use R
para corresponder a alguma quebra de linha unicode rn
, r
, v
, f
, n
, u +0085, U+2028 e U+2029.
Para corresponder a C/C ++ /*...*/
Comentários de várias linhas:
ug '/*(.*n)*?.**+/' myfile.cpp
Para corresponder aos comentários C/C ++ usando os padrões c/comments
predefinidos com -fc/comments
, restritos à parte correspondente apenas com a opção -o
:
ug -of c/comments myfile.cpp
O mesmo que sed -n '/begin/,/end/p'
: para corresponder a todas as linhas entre uma linha que contém begin
e a primeira linha após o end
contendo, usando repetição preguiçosa:
ug -o '.*begin(.|n)*?end.*' myfile.txt
? Voltar para o índice
-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 exibir duas linhas de contexto antes e depois de uma linha correspondente:
ug -C2 'FIXME' myfile.cpp
Para mostrar três linhas de contexto após uma linha correspondente:
ug -A3 'FIXME.*' myfile.cpp:
Para exibir uma linha de contexto antes de cada linha correspondente com uma definição de função C (n nomes C não unicode):
ug -B1 -f c/functions myfile.c
Para exibir uma linha de contexto antes de cada linha correspondente com uma definição de função C ++ (nomes C ++ podem ser unicode):
ug -B1 -f c++/functions myfile.cpp
Para exibir quaisquer linhas não correspondentes como contexto para corresponder linhas com -y
:
ug -y -f c++/functions myfile.cpp
Para exibir um hexdump de uma linha correspondente com uma linha de contexto de hexdump:
ug -C1 -UX 'xaaxbbxcc' a.out
O contexto dentro de uma linha é exibido com a opção -o
com uma opção de contexto:
ug -o -C20 'pattern' myfile.cpp
O mesmo, mas com uma saída bonita com títulos, números de linha e números de colunas ( -k
) e mostrando o contexto:
ug --pretty -oC20 'pattern' myfile.cpp
? Voltar para o índice
-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.
Os tipos de arquivo estão listados com ugrep -tlist
. A lista é baseada em extensões de nome de arquivo estabelecidas e "bytes mágicos". Se você tiver um tipo de arquivo que não estiver listado, use opções -O
e/ou -M
. Você pode definir um pseudônimo, por exemplo, alias ugft='ugrep -Oft'
como uma abreviação de pesquisar arquivos com o sufixo do nome do arquivo .ft
.
Para exibir recursivamente as definições de função nos arquivos C/C ++ ( .h
, .hpp
, .c
, .cpp
etc.) com números de linha com -tc++
, -o
, -n
e -f c++/functions
:
ug -on -tc++ -f c++/functions
Para exibir recursivamente as definições de função nos arquivos .c
e .cpp
com números de linha com -Oc,cpp
, -o
, -n
e -f c++/functions
:
ug -on -Oc,cpp -f c++/functions
Para listar recursivamente todos os arquivos shell com -tShell
para combinar com extensões de nome do arquivo e arquivos com shebangs Shell, exceto arquivos com sufixo .sh
:
ug -l -tShell -O^sh ''
Para listar recursivamente todos os arquivos que não são de casca com -t^Shell
:
ug -l -t^Shell ''
Para listar recursivamente todos os arquivos Shell com shebangs do Shell que não possuem extensões de nome de arquivo Shell:
ug -l -tShell -t^shell ''
Para procurar linhas com FIXME
nos comentários C/C ++, excluindo FIXME
em Strings multi-line:
ug -n 'FIXME' -f c++/zap_strings myfile.cpp
Para ler os padrões TODO
e FIXME
da entrada padrão para corresponder linhas na entrada, ao mesmo tempo em que exclui as correspondências em strings C ++:
ug -on -f - -f c++/zap_strings myfile.cpp <<END
TODO
FIXME
END
Para exibir o elemento XML e as tags de atributo em um arquivo XML, restritas à parte correspondente com -o
, excluindo tags que são colocadas em comentários (multi -line):
ug -o -f xml/tags -f xml/zap_comments myfile.xml
? Voltar para o índice
-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.
Arquivos compactados com gzip ( .gz
), compact ( .Z
), bzip2 ( .bz
, .bz2
, .bzip2
), lzma ( .lzma
), xz ( .xz
), lz4 ( .lz4
), zstd ( .zst
, .zstd
), brotli ( .br
) e bzip3 ( .bz3
) são pesquisados com a opção -z
quando as bibliotecas correspondentes são instaladas e compiladas com o ugrep. Esta opção não exige que os arquivos sejam compactados. Os arquivos não compactados também são pesquisados, embora mais lentos.
Outros formatos de compactação podem ser pesquisados com filtros Ugrep .
Os arquivos (CPIO, JAR, PAX, TAR, ZIP e 7Z) são pesquisados com a opção -z
. Arquivos regulares em um arquivo que corresponde são emitidos com os nomes de caminhos de arquivo fechados em aparelhos {
e }
. Os formatos de alcatrão suportados são V7, USTAR, GNU, Oldgnu e Pax. Os formatos de CPIO suportados são ODC, Newc e CRC. Não suportado é o formato binário antigo não portável e não portável. Os formatos de arquivo CPIO, TAR e PAX são automaticamente reconhecidos com a opção -z
com base em seu conteúdo, independentemente do sufixo do nome do arquivo.
Por padrão, os arquivos não compactados armazenados nos arquivos ZIP também são pesquisados: todos os arquivos CPIO, PAX e TAR armazenados nos arquivos ZIP e 7Z são reconhecidos e pesquisados automaticamente. No entanto, por padrão, os arquivos compactados armazenados nos arquivos não são reconhecidos, por exemplo, os arquivos ZIP armazenados nos arquivos TAR não são pesquisados, mas todos os arquivos e arquivos compactados são pesquisados como se fossem arquivos binários sem descomprimi -los.
Especifique --zmax=NUM
para pesquisar arquivos que contêm arquivos e arquivos compactados para até os NUM
níveis de profundidade. O valor de NUM
pode variar de 1 a 99 para até 99 etapas de descompressão e desarboração para expandir até 99 arquivos aninhados. Maiores --zmax=NUM
degradam o desempenho. É improvável que você precise de 99 como --zmax=2
é suficiente para a maioria dos casos de uso prático, como a pesquisa de arquivos ZIP armazenados em arquivos alcatrão.
Quando a opção -z
é usada com opções -g
, -O
, -M
ou -t
, arquivos e arquivos compactados e não compactados que correspondem aos critérios de seleção do nome do arquivo (GLOB, extensão, bytes mágicos ou tipo de arquivo) são pesquisados apenas. Por exemplo, ugrep -r -z -tc++
pesquisa arquivos C ++, como os arquivos main.cpp
e zip e alcatrão que contêm arquivos C ++ como main.cpp
. Também estão incluídos na pesquisa arquivos C ++ compactados como main.cpp.gz
e main.cpp.xz
quando presentes. Além disso, os arquivos CPIO, PAX, TAR, ZIP e 7Z, quando presentes, são pesquisados por arquivos C ++ que eles contêm, como main.cpp
. Use a opção --stats
para ver uma lista dos padrões do GLOB aplicados para filtrar nomes de caminhos de arquivo na pesquisa recursiva e ao pesquisar conteúdos de arquivo.
Quando a opção -z
é usada com opções -g
, -O
, -M
ou -t
para pesquisar arquivos CPIO, JAR, PAX, TAR, ZIP e 7Z, arquivos arquivados que correspondem aos critérios de seleção do nome do arquivo são pesquisados apenas.
Os formatos GZIP, compactação e Zip são detectados automaticamente, o que é útil ao ler dados compactados por GZIP da entrada padrão, por exemplo, entrada redirecionada de um tubo. Outros formatos de compressão requerem um sufixo de nome de arquivo: .bz
, .bz2
ou .bzip2
para bzip2, .lzma
para lzma, .xz
para xz, .lz4
para lz4, .zst
ou .zstd
para zstd, .br
para brotli e .bz3
para BZIP3. Também os abrevinos de arquivamento de alcatrão compactados .taz
, .tgz
e .tpz
para GZIP, .tbz
, .tbz2
, .tb2
e .tz2
para bzip2, .tlz
para lzma, .txz
para xz e .tzst
para zstd são reconhecidos. Para pesquisar esses formatos com ugrep a partir de entrada padrão, use a opção --label='stdin.bz2'
para bzip2, --label='stdin.lzma'
para lzma, --label='stdin.xz'
para xz, --label='stdin.lz4
para lz4 e --label='stdin.zst
para zstd e assim por diante. O nome stdin
é arbitrário e pode ser omitido:
formatar | Nome do arquivo sufixo | Sufixo curto do arquivo Tar/Pax | Sufixo necessário? | Ugrep de Stdin | biblioteca |
---|---|---|---|---|---|
gzip | .gz | .taz , .tgz , .tpz | não | automático | Libz |
compressa | .Z | .taZ , .tZ | não | automático | embutido |
zip | .zip , .zipx , .ZIP | não | automático | Libz | |
7zip | .7z | sim | --label=.7z | embutido | |
BZIP2 | .bz , .bz2 , .bzip2 | .tb2 , .tbz , .tbz2 , .tz2 | sim | --label=.bz2 | libbz2 |
lzma | .lzma | .tlz | sim | --label=.lzma | Liblzma |
xz | .xz | .txz | sim | --label=.xz | Liblzma |
LZ4 | .lz4 | sim | --label=.lz4 | liblz4 | |
zstd | .zst , .zstd | .tzst | sim | --label=.zst | libzstd |
Brotli | .br | sim | --label=.br | libbrotlidec | |
BZIP3 | .bz3 | sim | --label=.bz3 | libbzip3 |
Os formatos GZIP, BZIP2, XZ, LZ4 e ZSTD suportam arquivos compactados concatenados. Os arquivos compactados concatenados são pesquisados como um único arquivo.
Os métodos de compressão ZIP suportados são armazenados (0), deflate (8), BZIP2 (12), LZMA (14), XZ (95) e ZSTD (93). Os métodos BZIP2, LZMA, XZ e ZSTD exigem que o UGREP seja compilado com as bibliotecas de compressão correspondentes.
A busca de arquivos ZIP criptografados não é suportada (talvez em lançamentos futuros, dependendo de solicitações de aprimoramentos).
A pesquisa de arquivos 7ZIP leva muito mais RAM e mais tempo em comparação com outros métodos. A implementação 7ZIP LZMA SDK não suporta streaming, exigindo um arquivo 7Z procurável físico. Isso significa que os arquivos 7Z não podem ser pesquisados quando aninhados nos arquivos. O melhor é evitar o 7ZIP. O suporte ao 7ZIP pode ser desativado com ./build.sh --disable-7zip
para criar o ugrep.
Opção -z
usa threads para o paralelismo da tarefa para acelerar a pesquisa de arquivos maiores executando o descompressor simultaneamente com uma pesquisa do fluxo descomprimido.
Para listar todos os arquivos não vazios armazenados em um arquivo package.zip
, incluindo o conteúdo de todos os arquivos CPIO, PAX, TAR, ZIP e 7Z que são armazenados nele:
ug --zmax=2 -z -l '' package.zip
O mesmo, mas liste apenas os arquivos de código -fonte do Python, incluindo scripts que invocam o Python, com opção -tPython
( ugrep -tlist
para obter detalhes):
ug --zmax=2 -z -l -tPython '' package.zip
Para pesquisar os aplicativos Python distribuídos como um arquivo TAR com suas dependências, inclui como rodas (arquivos ZIP com código Python), pesquisando a palavra my_class
em app.tgz
:
ug --zmax=2 -z -tPython -w my_class app.tgz
Para pesquisar recursivamente os arquivos C ++, incluindo arquivos compactados pela palavra my_function
, enquanto pula os comentários C e C ++:
ug -z -r -tc++ -Fw my_function -f cpp/zap_comments
Para pesquisar dados compactados BZIP2, LZMA, XZ, LZ4 e ZSTD sobre entrada padrão, opção --label
pode ser usada para especificar a extensão correspondente ao formato de compressão para forçar a descompressão quando a extensão do BZIP2 não estiver disponível para o UGREP, por exemplo:
cat myfile.bz2 | ugrep -z --label='stdin.bz2' 'xyz'
Para pesquisar o arquivo main.cpp
no project.zip
por linhas TODO
e FIXME
:
ug -z -g main.cpp -w -e 'TODO' -e 'FIXME' project.zip
Para pesquisar Tarball project.tar.gz
para arquivos C ++ com linhas TODO
e FIXME
:
ug -z -tc++ -w -e 'TODO' -e 'FIXME' project.tar.gz
Para pesquisar os arquivos que correspondem ao Glob *.txt
no project.zip
para a Word license
em qualquer caso (observe que o argumento -g
glob deve ser citado):
ug -z -g '*.txt' -w -i 'license' project.zip
Para exibir e página através de todos os arquivos C ++ no Tarball project.tgz
:
ug --pager -z -tc++ '' project.tgz
Para listar os arquivos que correspondem ao Gitignore no estilo Glob /**/projects/project1.*
em projects.tgz
, selecionando arquivos contendo no arquivo o texto December 12
:
ug -z -l -g '/**/projects/project1.*' -F 'December 12' projects.tgz
Para visualizar os dados meta -inf/manifest.mf em um arquivo jar com -Ojar
e -OMF
para selecionar o arquivo JAR e o arquivo MF nele ( -Ojar
é necessário, caso contrário, o arquivo JAR será ignorado, embora possamos lê -lo de partir de entrada padrão em vez disso):
ug -z -h -OMF,jar '' my.jar
Para extrair arquivos C ++ que contêm FIXME
do project.tgz
, usamos -m1
com --format="'%z '"
para gerar uma lista separada por espaço de nomes de caminho do arquivo localizado no arquivo que corresponde à palavra FIXME
:
tar xzf project.tgz `ugrep -z -l -tc++ --format='%z ' -w FIXME project.tgz`
Para realizar uma pesquisa de profundidade com find
, use cpio
e ugrep
para pesquisar nos arquivos:
find . -depth -print | cpio -o | ugrep -z 'xyz'
? Voltar para o índice
--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 listar recursivamente todos os arquivos que começam com #!
Shebangs:
ug -l -M'#!' ''
Para listar recursivamente todos os arquivos que começam com #
, mas não com #!
Shebangs:
ug -l -M'#' -M'^#!' ''
Para listar recursivamente todos os arquivos python (extensão .py
ou uma shebang) com -tPython
:
ug -l -tPython ''
Para listar recursivamente todos os arquivos que não são de casca com -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 (