insensitive accents regex grep find regex-negation

accents - Usando "find" con regex-negation en Linux Server



regex mongodb accents (3)

Necesito recorrer todos los registros de Apache durante el último año y encontrar si alguna vez se visitó una página php (foobar.php) desde una dirección IP externa.

Así que necesito encontrar todas las líneas en los archivos Apache .log y log.gz que contengan foobar.php pero excluyen las visitas de todas las direcciones IP de la LAN (192.168.xx).

Puede encontrar o grep comando hacer eso?


Algo como esto (no probado) debería hacerlo:

find dir_where_logs_are -type f /( -name ''*.log'' -o -name ''*.log.gz'' /) -print | while IFS= read -r file do case $file in *.gz ) zgrep ''mypage/.php'' "$file" ;; * ) grep ''mypage/.php'' "$file" ;; esac done | grep -E -v ''192/.168/.[0-9]+/.[0-9]+''

Lo anterior asume que no hay nuevas líneas en sus nombres de archivo.


Estos dos comandos deberían buscar /mypage.php en todos los registros de acceso de Apache comprimidos y sin comprimir:

grep ''/mypage/.php'' access.log access.log.[0-9] | grep -v ''192/.168/.[0-9.]/+'' zcat access.log*.gz | grep ''/mypage/.php'' | grep -v ''192/.168/.[0-9.]/+''

grep -v niega la coincidencia de expresiones regulares para 192/.168/.[0-9.]* . zcat es como cat para gzip-compressedfiles.

Editar : como @EdMorton señaló en los comentarios, awk podría ser una herramienta mejor para nosotros:

awk ''///mypage/.php/ && !/192/.168/.[0-9.]+/'' access.log access.log.[0-9] zcat access.log*.gz | awk ''///mypage/.php/ && !/192/.168/.[0-9.]+/''


Suponiendo que sus registros están en formato de registros comunes (CLF), algo como esto debería funcionar:

zgrep -v ''^192/.168/.'' access.log* | grep ''/foobar/.php''