Como utilizar o comando Linux Grep para procurar strings de texto e expressões regulares!

Grep (impressão de expressão regular global) é usado para procurar strings de texto e expressões regulares linha a linha que correspondem a um padrão especificado dentro de um ou mais arquivos. Além disso, se você quer aprender mais sobre como usar outros comandos no Linux, temos uma lista completa com os principais comandos Linux que você precisa aprender. Mas, também temos uma outra lista com os comandos Linux que talvez você não conheça.

Comando Grep no Linux, saiba como usá-lo!

Abaixo estão alguns exemplos simples e úteis de como usá-lo no Linux e procurar uma string em um ou vários arquivos.

Terminal
grep 'DB_USER' wp-config.php
Saída do Terminal
define('DB_USER', 'wpuser');

Procure todos os arquivos PHP contendo texto ‘str_replace’ dentro do diretório ‘wp-admin’ de uma instalação do WordPress:

Terminal
grep "str_replace" admin.php
Saída do Terminal
admin-ajax.php: add_action( 'wp_ajax_' . $_GET['action'], 'wp_ajax_' . str_replace( '-', '', $_GET['action'] ), 1 );
admin-ajax.php: add_action( 'wp_ajax' . $_POST['action'], 'wp_ajax_' . str_replace( '-', '', $_POST['action'] ), 1 );
admin-header.php:$admin_body_class .= ' branch-' . str_replace( array( '.', ',' ), '-', floatval( $wp_version ) );
admin-header.php:$admin_body_class .= ' version-' . str_replace( '.', '-', preg_replace( '/^([.0-9]+)./', '$1', $wp_version ) );
admin-header.php:$admin_body_class .= ' locale-' . sanitize_html_class( strtolower( str_replace( '
', '-', get_locale() ) ) );

Se você deseja adicionar números de linha aos resultados da pesquisa, use o seguinte comando:

Terminal
grep -n "str_replace" admin*.php
Saída do Terminal
admin-ajax.php:73: add_action( 'wp_ajax_' . $_GET['action'], 'wp_ajax_' . str_replace( '-', '', $_GET['action'] ), 1 );
admin-ajax.php:76: add_action( 'wp_ajax' . $_POST['action'], 'wp_ajax_' . str_replace( '-', '', $_POST['action'] ), 1 );
admin-header.php:157:$admin_body_class .= ' branch-' . str_replace( array( '.', ',' ), '-', floatval( $wp_version ) );
admin-header.php:158:$admin_body_class .= ' version-' . str_replace( '.', '-', preg_replace( '/^([.0-9]+).*/', '$1', $wp_version ) );
admin-header.php:160:$admin_body_class .= ' locale-' . sanitize_html_class( strtolower( str_replace( '', '-', get_locale() ) ) );

Procure por todos os arquivos PHP cujo conteúdo menciona o texto ‘str_replace’ que possui letras maiúsculas ou pequenas, localizado no diretório ‘wp-admin’ recursivamente (ou seja, leia todos os arquivos em cada diretório) e apenas liste os nomes dos arquivos:

Terminal
grep -ril "str_replace" admin*.php
Saída do Terminal
admin-ajax.php
admin-header.php

O comando grep é frequentemente usado em um pipeline Unix/Linux com outros comandos. Abaixo estão alguns exemplos mais avançados de como usá-lo no Linux.

Procure por linhas que contenham ‘eval’ em todos os arquivos PHP localizados no diretório atual:

Terminal
find . -name '*.php' -exec grep -l 'eval' {} \;
Saída do Terminal
./wp-admin/includes/image.php
./wp-admin/includes/class-wp-upgrader.php
./wp-admin/includes/class-pclzip.php
./wp-admin/includes/media.php
./wp-admin/includes/update-core.php
./wp-admin/includes/ajax-actions.php
./wp-admin/includes/class-wp-automatic-updater.php
./wp-admin/includes/class-wp-posts-list-table.php
./wp-admin/user-edit.php
./wp-admin/edit-tag-form.php

Liste todos os processos Apache:

Terminal
ps aux | grep http
Saída do Terminal
root 1259 0.0 0.0 114644 984 pts/0 S+ 01:37 0:00 grep --color=auto http
root 1471 0.0 2.3 502008 24508 ? Ss Jun27 0:03 /usr/sbin/httpd -k start
nobody 31256 0.0 3.8 510140 40412 ? S 00:00 0:01 /usr/sbin/httpd -k start
nobody 31257 0.0 4.2 510220 44404 ? S 00:00 0:02 /usr/sbin/httpd -k start
nobody 31258 0.0 4.5 511156 47924 ? S 00:00 0:02 /usr/sbin/httpd -k start
nobody 31259 0.0 5.4 514240 56648 ? S 00:00 0:02 /usr/sbin/httpd -k start
nobody 31260 0.0 3.9 510388 41668 ? S 00:00 0:01 /usr/sbin/httpd -k start
nobody 31585 0.0 4.2 511156 44188 ? S 00:13 0:01 /usr/sbin/httpd -k start

Veja quais soquetes pertencem ao processo ID 31585:

Terminal
lsof -p 31585 | grep -Ei 'cwd|unix|sock'
Saída do Terminal
httpd 31585 nobody cwd DIR 144,142 4096 35120509 /
httpd 31585 nobody mem REG 8,18 38427466 /opt/cpanel/ea-php56/root/usr/lib64/php/modules/sockets.so (path dev=144,142)
httpd 31585 nobody mem REG 8,18 36064050 /usr/lib64/apache2/modules/mod_unixd.so (path dev=144,142)

Exibir o número total de conexões Apache na porta 80:

Terminal
netstat -an | grep :80 |wc -l
Saída do Terminal
1627

Remova todas as mensagens congeladas na fila de mensagens Exim imediatamente:

Terminal
exim -bpr | grep frozen | awk {'print $3'} | xargs exim -Mrm
Saída do Terminal
Message 1dPhFh-0000t6-D0 has been removed
Message 1dPenR-0000Ls-S8 has been removed
Message 1dPexx-0000OD-A6 has been removed

Encontre arquivos contendo um padrão de texto (por exemplo, olá):

Terminal
find . -iname "*.txt" -exec grep -l "hello" {} +

Variações do Comando Grep

Para procurar vários padrões em simultâneo, você pode simplesmente usar o comando egrep. Egrep é o mesmo que grep -E.

Terminal
egrep 'cachedir|exclude' /etc/yum.conf
cachedir=/var/cache/yum/$basearch/$releasever
exclude=lm_sensors*

O fgrep procura um arquivo ou lista de arquivos para uma sequência de padrões fixa. Fgrep é o mesmo que grep -F.

Terminal
fgrep 'cachedir' /etc/yum.conf
cachedir=/var/cache/yum/$basearch/$releasever

Existem vários outros exemplos de uso, mas espero que este post possa ter ajudado um pouco a esclarecer e ampliar seu uso.

Share This Article
Follow:
Fundador do SempreUPdate. Acredita no poder do trabalho colaborativo, no GNU/Linux, Software livre e código aberto. É possível tornar tudo mais simples quando trabalhamos juntos, e tudo mais difícil quando nos separamos.
Sair da versão mobile