Como Utilizar o Comando Grep

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.

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

# grep 'DB_USER' wp-config.php
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:

# grep "str_replace" admin*.php
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:

# grep -n "str_replace" admin*.php
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:

# grep -ril "str_replace" admin*.php
admin-ajax.php
admin-header.php

O comando grep é freqüentemente 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:

#find . -name '*.php' -exec grep -l 'eval' {} \;
./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:

# ps aux | grep http
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:

# lsof -p 31585 | grep -Ei 'cwd|unix|sock'
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:

# netstat -an | grep :80 |wc -l
1627

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

# exim -bpr | grep frozen | awk {'print $3'} | xargs exim -Mrm
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á):

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

Variações do Comando Grep

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

# 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 seqüência de padrões fixa. Fgrep é o mesmo que grep -F.

# 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.

Fonte RoseTutorial

Comentários