search-dotnet.sh¶
File:
iis/iis_scripts/search-dotnet.sh
# search-dotnet.sh
#!/bin/bash
#
# Search .NET logs (simple pattern matching, no field parsing)
#
# Usage:
# cd /rootA/dotnet
# ./search-dotnet.sh --code "403"
# ./search-dotnet.sh --path "/OrderTests" --time "14:00:00-15:00:00"
#
# Options:
# --path : URL pattern to match
# --time : Time range (matches as string)
# --code : Error code (word boundary match, so "403" won't match "11112403")
#
# Output: Opens fzf with preview, press Enter to open in editor
path_pattern=""
time_pattern=""
error_code=""
while [[ $# -gt 0 ]]; do
case $1 in
--path) path_pattern="$2"; shift 2;;
--time) time_pattern="$2"; shift 2;;
--code) error_code="$2"; shift 2;;
*) shift;;
esac
done
# Build grep pattern
pattern=""
[[ -n "$path_pattern" ]] && pattern="${pattern:+$pattern|}$path_pattern"
[[ -n "$time_pattern" ]] && pattern="${pattern:+$pattern|}$time_pattern"
[[ -n "$error_code" ]] && pattern="${pattern:+$pattern|}\b$error_code\b"
find . -type f -exec grep -n "${pattern:-.*}" {} + | \
fzf --ansi \
--delimiter=: \
--preview 'bat --color=always --highlight-line {2} --line-range {2}: {1} 2>/dev/null || cat {1} | sed -n "$(($(echo {2})-5)),$(($(echo {2})+5))p"' \
--preview-window 'right:60%:+{2}-5' \
--bind 'enter:execute(${EDITOR:-vim} +{2} {1})'