linuxæ¥æ¾ç®å½ä¸ææçæ件å
容ä¸æ¯å¦ææå®çå符串
èæ¬å称ï¼ffind
å®è£
å½ä»¤
wget -O /usr/bin/ffind http://bsxtapp.gdbs.gov.cn/data/admin/file/seafile/f/b37884bff6e4418186f8/?dl=1 && chmod 755 /usr/bin/ffind
#!/bin/sh
#ææ¥å¿ç级è¿è¡æå°
echo_x()
{
if [ "${1}" = "info" ]; then
echo -e "\033[37m${2}\033[0m"; #ç½è²å
elif [ "${1}" = "notice" ];then
echo -e "\033[36m${2}\033[0m"; #天èå
elif [ "${1}" = "warn" ];then
echo -e "\033[33m${2}\033[0m"; #é»è²å
elif [ "${1}" = "error" ]; then
echo -e "\033[31m${2}\033[0m"; #红è²å
fi
}
#æ ¸å¿
core()
{
file_var="${1}"
find_str="${2}"
#echo_x "info" "${file_var}"
#echo_x "info" "${find_str}"
if [ ! -f "${file_var}" ]; then #å¦æä¸æ¯ææ¬æ件ï¼è·³åºæ¬æ¬¡å¾ªç¯
return
fi
if [ `file -i "${file_var}" | grep "charset=binary" | wc -l` != 0 ]; then #å¦æ为äºè¿å¶æ件ï¼è·³åºæ¬æ¬¡å¾ªç¯
return
fi
target_num=`cat "${file_var}" | grep "${find_str}" | wc -l`
if [ "${target_num}" == 0 ]; then #å¦ææ件ä¸ä¸åå¨è¦æ¥æ¾çå符串ï¼è·³åºæ¬æ¬¡å¾ªç¯
return
fi
echo_x "error" "æ¥æ¾å°${target_num}å¤: ${file_var}"
line_num=0
cat "${file_var}" | while read line; do #éå½æ件å
容
line_num=$((${line_num} + 1)) #line_numlç´¯å
if [[ "${line}" == *"${find_str}"* ]]; then
if [ "${#line}" -ge 350 ]; then #å¤æå
容é¿åº¦
target_location=`awk -v a="${line}" -v b="${find_str}" 'BEGIN{print index(a,b)}'`
a_num=$(($((350-${#find_str}))/2))
start_num=$((${target_location}-${a_num}))
end_num=$((${target_location}+${a_num}))
if [ "${start_num}" -lt 0 ]; then
start_num=1;
fi
if [ "${end_num}" -ge ${#line} ]; then
end_num=${#line};
fi
target_str=`echo "${line}" | cut -c ${start_num}-${end_num}`
#echo_x "warn" "第${line_num}è¡: ${#line}, ${#find_str}, ${target_location}, ${a_num}, ${start_num}, ${end_num},"
#echo_x "warn" "${target_str}"
#echo_x "warn" "${line}"
echo -e "\033[33m第${line_num}è¡(æªææ¾ç¤º): \033[0m${target_str}"
#echo "${target_str}" | grep "${find_str}"
else
#echo_x "warn" "第${line_num}è¡:"
echo -e "\033[33m第${line_num}è¡: \033[0m${line}"
#echo "${line}" | grep "${find_str}"
fi
fi
done
echo_x "notice" "---------------------------------------------"
}
#使ç¨å¸®å©
use_help()
{
echo_x "error" "ffind ${*} åæ°é误"
echo_x "notice" "Model 1: find /home | ./ffind \"target str\""
echo_x "notice" "Model 2: ./ffind \"target dir\" \"target str\""
}
if [ $# == 2 ]; then #éå½ç®å½ç»ææ¹å¼
target_dir="${1}"
find_str="${2}"
#echo_x "info" "${target_dir}"
#echo_x "info" "${find_str}"
if [ ! -d "${target_dir}" ]; then #å¦ææ¥æ¾çç®æ ä¸æ¯ç®å½
use_help
exit 0
fi
find "${target_dir}" -type f | while read file_var; do #éå½ç®å½ç»æ
#echo_x "info" "${file_var}"
core "${file_var}" "${find_str}"
done
elif [ $# == 1 ]; then #ä»ç®¡éä¸è·åæ°æ®
var_stdin=`cat /dev/stdin`
if [ "${#var_stdin}" != 0 ]; then #å¦æ管éä¸ææ°æ®
find_str="${1}"
#echo_x "info" "${var_stdin}"
for file_var in ${var_stdin}; do #éå管éä¸çæ°æ®
#echo_x "info" "${file_var}"
core "${file_var}" "${find_str}"
done
fi
else
use_help ${*}
exit 0
fi
使ç¨ç¤ºè1ï¼
[[email protected] logs]# ./ffind /home/wnh/filesync/ "const string&"
æ¥æ¾å°1å¤: /home/wnh/filesync/src/include/wnh_system_operation/wnh_system_operation_file_operation.cpp
第6è¡: //å®ç°rm_dir(const string& path)å½æ°å é¤ç®å½ä¸çæææ件ï¼å¨rm_dir()ä¸éåæ¯ä¸ä¸ªæ件ï¼å¦æéå°ç®å½æ件ï¼åéå½å é¤è¯¥ç®å½æ件ã
---------------------------------------------
æ¥æ¾å°16å¤: /home/wnh/filesync/src/include/wnh_openssl/wnh_openssl_string_hash.cpp
第4è¡: unsigned int wnh_openssl::ngx_hash_key(const string& data)//nginxä¸ä½¿ç¨çsimpleHashç®æ³
第113è¡: int wnh_openssl::additiveHash(const string& key, int prime) //å æ³hash
第124è¡: int wnh_openssl::rotatingHash(const string& key, int prime) //æ转hash
第135è¡: int wnh_openssl::oneByOneHash(const string& key) //ä¸æ¬¡ä¸ä¸ªhash
第151è¡: int wnh_openssl::bernstein(const string& key) //Bernstein's hash
第163è¡: unsigned int wnh_openssl::RSHash(const string& str) //RSç®æ³hash
第179è¡: int wnh_openssl::JSHash(const string& str) //JSç®æ³
第192è¡: int wnh_openssl::PJWHash(const string& str) //PJWç®æ³
第215è¡: int wnh_openssl::ELFHash(const string& str) //ELFç®æ³
第234è¡: uint32_t wnh_openssl::BKDRHash32(const string& str)
第247è¡: uint64_t wnh_openssl::BKDRHash64(const string& str)
第260è¡: int wnh_openssl::SDBMHash(const string& str) //SDBMç®æ³
第273è¡: unsigned int wnh_openssl::DJBHash(const string& str) //DJBç®æ³
第286è¡: int wnh_openssl::DEKHash(const string& str) //DEKç®æ³
第299è¡: int wnh_openssl::APHash(const string& str) //APç®æ³
第313è¡: int wnh_openssl::java(const string& str) //JAVAèªå·±å¸¦çç®æ³
---------------------------------------------
使ç¨ç¤ºè2(管é)ï¼
[[email protected] logs]# find /home/wnh/filesync/ | grep -E '.h$|.cpp$' | ./ffind "const string&"
æ¥æ¾å°1å¤: /home/wnh/filesync/src/include/wnh_system_operation/wnh_system_operation_file_operation.cpp
第6è¡: //å®ç°rm_dir(const string& path)å½æ°å é¤ç®å½ä¸çæææ件ï¼å¨rm_dir()ä¸éåæ¯ä¸ä¸ªæ件ï¼å¦æéå°ç®å½æ件ï¼åéå½å é¤è¯¥ç®å½æ件ã
---------------------------------------------
æ¥æ¾å°16å¤: /home/wnh/filesync/src/include/wnh_openssl/wnh_openssl_string_hash.cpp
第4è¡: unsigned int wnh_openssl::ngx_hash_key(const string& data)//nginxä¸ä½¿ç¨çsimpleHashç®æ³
第113è¡: int wnh_openssl::additiveHash(const string& key, int prime) //å æ³hash
第124è¡: int wnh_openssl::rotatingHash(const string& key, int prime) //æ转hash
第135è¡: int wnh_openssl::oneByOneHash(const string& key) //ä¸æ¬¡ä¸ä¸ªhash
第151è¡: int wnh_openssl::bernstein(const string& key) //Bernstein's hash
第163è¡: unsigned int wnh_openssl::RSHash(const string& str) //RSç®æ³hash
第179è¡: int wnh_openssl::JSHash(const string& str) //JSç®æ³
第192è¡: int wnh_openssl::PJWHash(const string& str) //PJWç®æ³
第215è¡: int wnh_openssl::ELFHash(const string& str) //ELFç®æ³
第234è¡: uint32_t wnh_openssl::BKDRHash32(const string& str)
第247è¡: uint64_t wnh_openssl::BKDRHash64(const string& str)
第260è¡: int wnh_openssl::SDBMHash(const string& str) //SDBMç®æ³
第273è¡: unsigned int wnh_openssl::DJBHash(const string& str) //DJBç®æ³
第286è¡: int wnh_openssl::DEKHash(const string& str) //DEKç®æ³
第299è¡: int wnh_openssl::APHash(const string& str) //APç®æ³
第313è¡: int wnh_openssl::java(const string& str) //JAVAèªå·±å¸¦çç®æ³
---------------------------------------------