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''