find-in-files script
This commit is contained in:
parent
d7953e948c
commit
ce76e1ed0f
74
sys/fif
Executable file
74
sys/fif
Executable file
@ -0,0 +1,74 @@
|
||||
#!/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
|
Loading…
Reference in New Issue
Block a user