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.