Uso del comando Grep con ejemplos.
El comando grep (impresión de la expresión regular global), se usa para buscar cadenas de texto y expresiones regulares línea por línea que coincidan con un patrón definido en uno o más archivos.
En este artículo, veremos con ejemplos, como utilizar eficazmente el comando grep en linux, de la misma forma trataremos sus variantes: egrep y fgrep.
El comando Grep con ejemplos
Buscar en un archivo especifico:
Buscamos la linea que contiene ‘DB_USER‘ en el archivo de configuración «wp-config.php» de WordPress.
grep 'DB_USER' wp-config.php
ejemplo de salida…
define(‘DB_USER’, ‘usuariobasededatos’);
Buscar en todos los archivos:
Buscamos en el directorio «wp-admin» y solo en los archivos «php«, las lineas que incluyan el texto ‘str_replace‘.
grep "str_replace" admin*.php
ejemplo de salida…
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() ) ) );
Buscar en todos los archivos identificando la linea:
Buscamos en el directorio «wp-admin» y solo en los archivos «php«, las lineas que incluyan el texto ‘str_replace‘. Este comando es similar al anterior, con la particularidad que nos indica el numero de linea donde se encuentra la expresión.
grep -n "str_replace" admin*.php
ejemplo de salida…
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() ) ) );
Buscar archivos recursivamente que contengan un texto especifico:
Este comando es similar a los anteriores, pero solo nos imprimirá en pantalla el nombre de los archivos que contienen ‘str_replace‘.
grep -ril "str_replace" admin*.php
ejemplo de salida…
admin-ajax.php
admin-header.php
El comando grep permite la combinación con otros comandos, vemos algunos ejemplos.
Buscar archivos con un texto definido en la carpeta actual:
Hacemos una búsqueda de los archivos «php» en la carpeta donde nos encontremos en ese momento, que contengan el texto ‘eval‘. Combinamos «grep» con «find«.
find . -name '*.php' -exec grep -l 'eval' {} \;
ejemplo de salida…
./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
Listar procesos de Apache:
Combinando «grep» con «ps aux«, listamos los procesos de Apache.
ps aux | grep http
ejemplo de salida…
root 19357 0.0 0.1 433928 22380 ? Ss mar05 0:01 /usr/sbin/httpd -DFOREGROUND
apache 25539 0.0 0.0 276728 9140 ? S 03:37 0:00 /usr/sbin/httpd -DFOREGROUND
apache 25541 0.0 0.0 436012 11092 ? S 03:37 0:00 /usr/sbin/httpd -DFOREGROUND
apache 25542 0.2 0.4 2361240 69560 ? Sl 03:37 0:29 /usr/sbin/httpd -DFOREGROUND
apache 25543 0.0 0.4 2361240 70536 ? Sl 03:37 0:09 /usr/sbin/httpd -DFOREGROUND
apache 25546 0.0 0.4 2361240 67648 ? Sl 03:37 0:09 /usr/sbin/httpd -DFOREGROUND
apache 27003 0.0 0.4 2361240 72088 ? Sl 03:40 0:11 /usr/sbin/httpd -DFOREGROUND
root 56885 0.0 0.0 112732 980 pts/0 S+ 06:57 0:00 grep –color=auto http
Ver el socket del ID de un proceso:
En este caso probaremos el «id 25546».
lsof -p 25546 | grep -Ei 'cwd|unix|sock'
ejemplo de salida…
httpd 25546 apache cwd DIR 8,2 4096 2 /
httpd 25546 apache mem REG 8,2 91528 23729450 /usr/lib64/php-zts/modules/sockets.so
httpd 25546 apache mem REG 8,2 15392 23205555 /usr/lib64/httpd/modules/mod_unixd.so
httpd 25546 apache 1u unix 0xffff8bb764960000 0t0 5922520 socket
httpd 25546 apache 3u sock 0,7 0t0 5923227 protocol: TCP
httpd 25546 apache 5u sock 0,7 0t0 5923235 protocol: TCP
Ver el numero de conexiones a un puerto:
Combinando»grep» con el comando «netstat» podemos imprimir en pantalla el numero de conexiones de un puerto (en el ejemplo el 80).
netstat -an | grep :80 |wc -l
ejemplo de salida…
1827
Eliminar mensajes congelados de Exim:
Eliminamos todos los mensajes congelados de la cola de correo de Exim.
exim -bpr | grep frozen | awk {'print $3'} | xargs exim -Mrm
ejemplo de salida…
Message 1dChLr-0000y6-D1 has been removed
Message 1dPinU-0000Ld-S3 has been removed
Message 1dPaox-0000OC-A8 has been removed
Buscar archivos con un patrón de texto:
Buscamos archivos que contengan el patrón «sololinux«.
find . -iname "*.txt" -exec grep -l "sololinux" {} +
Con el comando «egrep» podemos buscar varios patrones a la vez (en el ejemplo buscamos sololinux y adminserver).
egrep 'sololinux|adminserver' /etc/yum.conf
ejemplo…
sololinux=/var/cache/yum/$basearch/$releasever
adminserver=lm_sensors*
Por ultimo usaremos el comando «fgrep«, que buscara un archivo o lista de archivos de una cadena de patrón fija.
fgrep 'sololinuxes' /etc/yum.conf
ejemplo…
sololinuxes=/var/cache/yum/$basearch/$releasever
Damos por concluido el articulo «Uso del comando Grep con ejemplos«, compártelo.