Ack é melhor que grep

Quero falar sobre uma ferramenta de busca que facilita muito a vida. Quando eu acesso um servidor e preciso procurar algo, a primeira coisa que faço é verificar se o ack está instalado. Esta ferramenta é uma excelente alternativa ao grep, bem como em certa medida ao find e wc. Por que não usar o grep? O Ack tem configurações mais agradáveis desde o início, opções mais legíveis, expressões regulares Perl e um sistema de configurações. Se você gosta (ou precisa) de buscar através do terminal, definitivamente vale a pena experimentá-la.

Funcionalidades Básicas

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

Podemos usar a flag -w, para dizer à ferramenta para buscar a ocorrência do nosso padrão, cercado por limites de palavras (espaços, barras etc.).

ack -w mysql

Ack é melhor que grep

O Ack suporta buscas 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

A lista completa de tipos de arquivos suportados pode ser vista com:

ack --help-types

Freqüentemente, precisamos contar quantas vezes uma frase aparece em um arquivo de log, por exemplo, para entender quanta informação um script processou.

Ack é melhor que grep
Contamos quantas vezes a palavra process aparece no arquivo test.log, ignorando maiúsculas (-i).

Podemos contar as ocorrências não apenas em um arquivo específico, mas em um grupo. Aperfeiçoamos a busca anterior pela palavra mysql: vamos contar o número de ocorrências da palavra (-c) em arquivos *.js (—js), excluindo arquivos em que nada foi encontrado (-h) e somando o total.

# выведем на экран все вхождения
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 (--selector)

ack --js -w -cl mysql

Ack é melhor que grep

Se você precisar de contexto adicional para a busca, pode pedir ao ack
para mostrar linhas antes (-B) e depois (-A) da expressão encontrada. Para isso, é necessário especificar após a opção o número de linhas que devem ser exibidas.

# 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 precisar de ambas as coisas, então use (-C)

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

Há também a opção (-v) para inverter a busca, ou seja, mostrar linhas que não contêm o padrão especificado.

Expressões Regulares

O Ack, ao contrário do grep, usa expressões compatíveis com Perl.
Para mim, isso é uma grande vantagem, não precisa decorar uma sintaxe separada para expressões regulares.

ack 'vars+adds+'

Ack é melhor que grep

Um exemplo mais complexo

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

Ack é melhor que grep

Freqüentemente, queremos deixar apenas o que corresponde ao padrão nos resultados. Aqui a opção —output ajuda (-o)

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

Ack é melhor que grep

Além disso, com os parênteses, podemos destacar a parte encontrada e referi-la no output através da variável $[número do grupo]. Por exemplo,

ack --output='versão é $1' '*s+[v(d+.d+.d+)]'

Ack é melhor que grep

Ack possui opções úteis —range-start e —range-end. Elas ajudam quando
os dados não estão armazenados em uma única linha, mas em formato multilinha.

Por exemplo, há um arquivo com código sql

Ack é melhor que grep

Extrairemos os nomes das colunas. O início do bloco será uma linha que começa com SELECT, e o fim será uma linha que começa com FROM.

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

Ack é melhor que grep

Se na expressão de pesquisa estão envolvidos caracteres especiais como ponto, parêntese e outros, para não precisar escapar com , podemos usar a opção -Q.

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

Ack é melhor que grep

Trabalhando com arquivos

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

ack -f --js

Ack é melhor que grep

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

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

Ack é melhor que grep

Configuração

A ferramenta possui seu próprio arquivo de configuração. Pode-se ter uma configuração global para o usuário (~\/ .ackrc), assim como uma local para uma pasta específica (nesta pasta é necessário criar o arquivo .ackrc).

A maioria das opções que são especificadas nas configurações também podem ser definidas manualmente ao chamar. Vamos analisar algumas delas.

Ignorar a pasta durante a busca

--ignore-dir=dist

Vamos adicionar um tipo de arquivo personalizado —vue.

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

Agora é possível usar a opção —vue para procurar em arquivos .vue. Por exemplo: ack —vue App.
Nesse caso, podemos especificar uma lista de extensões para esta opção. Por exemplo, aqui ao usar —vue, também serão processados
.js arquivos.

Игнорировать файлы, например, минифицированные *.min.js

--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 a partir do site

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

Plugins para editores:

Conclusão

Isso está longe de ser todas as funcionalidades. A lista completa de funções pode ser vista executando:

ack –-help
# ou
ack --man

A ferramenta ack torna a pesquisa no terminal mais conveniente e flexível. E com o pipeline (ack -C 10 hello | ack world) é possível criar uma poderosa combinação para pesquisa e filtragem de dados no sistema de arquivos e nos próprios arquivos.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster