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.
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 é 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:
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 em simultâneo, 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 sequê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.