Ack é melhor que grep

Quero falar sobre um utilitário de pesquisa que simplifica muito a vida. Quando chego ao servidor e preciso procurar alguma coisa, a primeira coisa que faço é verificar se o ack está instalado. Este utilitário é um excelente substituto para grep, bem como find e wc até certo ponto. Por que não grep? Ack tem configurações melhores prontas para uso, opções mais legíveis, perl regex e um sistema de configuração. Se você gosta (precisa) pesquisar no terminal, então você definitivamente deveria tentar.

Recursos básicos

Ack é recursivo por padrão e escrever menos opções é sempre uma boa ideia.

Podemos usar uma bandeira -wpara dizer ao utilitário para procurar uma instância de nosso padrão cercada por limites de palavras (espaços em branco, barras, etc.).

ack -w mysql

Ack é melhor que grep

Ack suporta pesquisa por tipo de arquivo. Por exemplo, vamos encontrar a versão do módulo em arquivos json.

ack --json '"version":s+"d+.d+.d+"'

Ack é melhor que grep

Uma lista completa dos tipos de arquivos suportados pode ser visualizada usando:

ack --help-types

Muitas vezes você precisa contar quantas vezes uma frase aparece em um arquivo de log, por exemplo, para entender quantos dados o script processou.

Ack é melhor que grep
Contamos quantas vezes o processo ocorre no arquivo test.log, sem levar em consideração o caso (-i).

Podemos contar ocorrências não apenas em um arquivo específico, mas em um grupo. Vamos finalizar a busca anterior pela palavra mysql: conte o número de ocorrências das palavras (com) em arquivos *.js (--js), excluindo arquivos nos quais nada foi encontrado (-h) e resumindo o resultado.

# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql

Ack é melhor que grep

Além disso, podemos obter um relatório detalhado sobre o número de ocorrências em cada arquivo usando (-l)

ack --js -w -cl mysql

Ack é melhor que grep

Se precisar de contexto adicional para sua pesquisa, você pode perguntar
mostrar linhas até (-B) e depois (-A) da expressão encontrada. Para fazer isso, você precisa especificar após a opção o número de linhas que precisam ser mostradas.

# 2 строки до 
ack --js --column -B 2 "query.once('" ./lib/

Ack é melhor que grep

# 2 строки после 
ack --js --column -A 2 "query.once('" . /lib/

Ack é melhor que grep

E se você precisar de ambos, use (-A PARTIR DE)

ack --js --column -C 2 "query.once('" ./lib/

Também existe uma opção (-v) para inverter a pesquisa, ou seja, mostrar linhas que não contêm um determinado padrão.

Expressão regular

Ack, diferentemente do grep, usa expressões compatíveis com Perl.
Para mim isso é uma grande vantagem; não preciso me lembrar de uma sintaxe separada para expressões regulares.

ack 'vars+adds+'

Ack é melhor que grep

Exemplo mais complexo

ack '*s+[vd+.d+.d+]'

Ack é melhor que grep

Muitas vezes você deseja deixar nos resultados apenas o que corresponde ao modelo. A opção --output ajudará aqui (-o)

ack -o '*s+[vd+.d+.d+]'

Ack é melhor que grep

Além disso, usando parênteses podemos selecionar a parte encontrada e acessá-la na saída através da variável $[group number]. Por exemplo,

ack --output='version is $1' '*s+[v(d+.d+.d+)]'

Ack é melhor que grep

Ack tem opções úteis --range-start и --range-end. Eles ajudam quando
Os dados são armazenados não em uma linha, mas em formato multilinha.

Por exemplo, existe um arquivo com código sql

Ack é melhor que grep

Vamos extrair os nomes das colunas. O início do bloco será uma linha começando com SELECT e o final será uma linha começando com FROM.

ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql

Ack é melhor que grep

Se a expressão de pesquisa contiver caracteres especiais, como ponto final, parêntese e outros, para não escapar deles usando , você pode usar a opção -Q.

# Поиск с экранированием 
ack --json 'mysql.'    
# Поиск без экранирования
ack --json -Q mysql.

Ack é melhor que grep

Trabalhando com arquivos

Obtenha uma lista de arquivos com uma extensão específica

ack -f --js

Ack é melhor que grep

Encontre todos os arquivos js cujo nome começa com P* usando a opção (-g).

ack -g --js '/Pa.+.js$'

Ack é melhor que grep

Configuração

O utilitário possui seu próprio arquivo de configuração. Você pode ter uma configuração global para o usuário (~/.ackrc) e uma local para uma pasta específica (você precisa criar um arquivo .ackrc na pasta).

A maioria das opções escritas nas configurações podem ser especificadas manualmente quando chamadas. Vejamos alguns deles.

Ignorar pasta ao pesquisar

--ignore-dir=dist

Vamos adicionar um tipo de arquivo personalizado -vue.

--type-add=vue:ext:js,vue

Agora você pode usar a opção --vue para pesquisar arquivos .vue. Por exemplo: ack --vue Aplicativo.
Você pode especificar uma lista de extensões para esta opção. Por exemplo, aqui, ao usar -vue, o seguinte será processado:
Arquivos .js.

Ignore arquivos, por exemplo *.min.js minificados

--ignore-file=match:/.min.js$/

Instalação

CentOS

yum update -y && yum install ack -y

Ubuntu

apt-get update -y && apt-get install ack-grep -y

Mac OS

brew update && brew install  ack

Instalação do site

curl https://beyondgrep.com/ack-v3.3.1 > ~/bin/ack && chmod 0755 ~/bin/ack

Plug-ins para editores:

Conclusão

Estas não são todas as possibilidades. A lista completa de funções pode ser visualizada executando:

ack –-help
# или
ack --man

O utilitário ack permite tornar a pesquisa no terminal mais conveniente e flexível. E usando pipeline (ack -C 10 olá | ack mundo) você pode criar uma combinação poderosa para pesquisar e filtrar dados no sistema de arquivos e nos próprios arquivos.

Fonte: habr.com

Adicionar um comentário