75 lines
2.9 KiB
Plaintext
75 lines
2.9 KiB
Plaintext
|
#!/usr/bin/env zsh
|
||
|
|
||
|
Help()
|
||
|
{
|
||
|
echo "fif -g \"string\" -f \"regex pattern\" [-d \"path\"] "
|
||
|
echo " Options: "
|
||
|
echo " -g string [REQUIRED] search string for grep"
|
||
|
echo " -f regex [REQUIRED] filemask for search "
|
||
|
echo " [-d directory] path to search [defaults to . ] "
|
||
|
echo " -v prints matching lines in files. "
|
||
|
echo " (default is file list only) "
|
||
|
echo " -h display this help "
|
||
|
echo " "
|
||
|
echo "EXAMPLES: "
|
||
|
echo " fif -g \"hello\" -f \"(?i)^.*\.bas+$\" "
|
||
|
echo " searches all files maching the mask '*.bas' in the "
|
||
|
echo " current working directory for the string 'hello'. "
|
||
|
echo " "
|
||
|
echo " fif -g \"len\" -f \"(?i)^.*\.py+$\" -d /home/gmgauthier/Projects/code/python -v"
|
||
|
echo " searches all files maching the mask '*.py' in the "
|
||
|
echo " 'src/package' directory, for the string '.alen' "
|
||
|
echo " and prints the matched lines to the console "
|
||
|
echo " "
|
||
|
echo "NOTES: "
|
||
|
echo " - something similar can be done with a single grep. "
|
||
|
echo " eg: 'grep -rnw ~/Projects/code/python/passwdtools -e '.*\.length.*'"
|
||
|
echo " However, the raw grep doesn't give you the "
|
||
|
echo " ability to choose which files to scan. "
|
||
|
echo ""
|
||
|
echo " - grep takes a simple search string "
|
||
|
echo " - the filemask can be either ERE or PCRE regex "
|
||
|
echo " - all searches are recursive "
|
||
|
exit 0
|
||
|
}
|
||
|
|
||
|
while getopts g:f:d:hv flag
|
||
|
do
|
||
|
case "${flag}" in
|
||
|
g) grepstr=${OPTARG};;
|
||
|
f) filemask=${OPTARG};;
|
||
|
d) dir=${OPTARG};;
|
||
|
v) verbose=true;;
|
||
|
h) Help;;
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
if [[ -z $grepstr ]] then
|
||
|
echo "You must supply a search string in ere regex format"
|
||
|
exit 0
|
||
|
fi
|
||
|
|
||
|
if [[ -z $filemask ]] then
|
||
|
echo "You must supply a filename filter for searches in pcre regex format"
|
||
|
exit 0
|
||
|
fi
|
||
|
|
||
|
if [[ -z $dir ]] then
|
||
|
dir="."
|
||
|
fi
|
||
|
|
||
|
# We have to validate the filelist first, otherwise grep will just
|
||
|
# try to search on whatever is in the PWD
|
||
|
filelist=$(fd -0 $filemask $dir|sed 's/.$//')
|
||
|
if [[ -z $filelist ]] || [[ $filelist == "" ]] then
|
||
|
echo "No files found matching your filemask. Search cannot be executed"
|
||
|
exit 1
|
||
|
else
|
||
|
if [[ $verbose == true ]]; then
|
||
|
grep -inwrE $grepstr $(fd -0 -H $filemask $dir|sed 's/.$//') # sed strips fd's "%"
|
||
|
else
|
||
|
grep -linwrE $grepstr $(fd -0 -H $filemask $dir|sed 's/.$//') # sed strips fd's "%"
|
||
|
fi
|
||
|
fi
|
||
|
exit 0
|