面对动不动10多G容量的android源码目录,想要在这个源码目录里搜索一个 字符串,或者想要知道某个函数的定义,实在太难了,尤其是没有目的的搜索,速度是很慢的。但时间是弥足珍贵的,效率是必须提升的,我们总不能继续沦为更底层的码农吧,哈哈。这个脚本就是帮助大家从搜索源码的禁锢当中解脱的。
使用方法:
$ chgrep
please append 2 args behind the chgrep!
Help(Example):
chgrep <file_type> <find_in_sub_dir> <grep_string> [grep_options]
chgrep ch mediatek/ blacklight :is finding blacklight in *.c *.h files in mediatek dir
<file_type>:: ch: *.c,*.h; cpph ;cc;ch+k;java;asm; ccj: cpp,h,c,java; log: *.log *.txt; mk: mk,Makefile..;
示例:
chgrep ccj mediatek,hardware,system,frameworks/ "notifyPixelsChanged" -iw
上面这个示例的含义是,在当前目录下的 “mediatek,hardware,system,frameworks” 4个子目录中寻找 C/C++/JAVA代码,并在这些代码里查找 "notifyPixelsChanged" 字符串。
-i 的意思是 不区分大小写, -w的意思是 全字匹配。只要是 grep命令的参数,都可以用在这里。
比如 -n ,可以在搜索结果显示出找到关键词的行号。
脚本内容如下:
$ cat ../runsh/chgrep
#!/bin/bash
#curr_dir=$(pwd)/
ign_case=$4
#echo $curr_dir
sear_dirs=${2//','/' '}
echo Sear_dirs:$sear_dirs
search_dirs=($sear_dirs)
echo search_dirs:$search_dirs
if [ $# -lt 3 ]; then
echo "please append 2 args behind the chgrep!"
echo "Help(Example):"
echo "chgrep <file_type> <find_in_sub_dir> <grep_string>"
echo "chgrep ch mediatek/ blacklight :is finding blacklight in *.c *.h files in mediatek dir"
echo "<file_type>:: ch: *.c,*.h; cpph ;cc;ch+k;java;asm; ccj: cpp,h,c,java; log: *.log *.txt; mk: mk,Makefile..;"
else
echo Search_dir:$2
echo Search_Str:$3
echo Case_sensi:$4
for idx in $sear_dirs ; do
echo "----Searching dir: [ $idx ] for greping str: [ $3 ]"
if [ "$1" = "ch" ]; then
echo " Search c and h:"
find $curr_dir$idx \( -iname "*.c" -o -iname "*.h" \) | xargs grep $ign_case --color=auto "$3"
find $curr_dir$idx \( -iname "*.S" -o -iname "*.asm" \) | xargs grep $ign_case --color=auto "$3"
elif [ "$1" = "ch+k" ]; then
echo " Search c and h in dir(kernel,$2):"
find $curr_dir$idx \( -name "*.c" -o -name "*.h" \) | xargs grep $ign_case --color=auto "$3"
find $curr_dir$idx \( -iname "*.S" -o -iname "*.asm" \) | xargs grep $ign_case --color=auto "$3"
echo " ----------results in kernel:"
find kernel \( -name "*.c" -o -name "*.h" \) | xargs grep $ign_case --color=auto "$3"
find kernel \( -iname "*.S" -o -iname "*.asm" \) | xargs grep $ign_case --color=auto "$3"
elif [ "$1" = "cpph" ]; then
echo " Search cpp and h:"
find $curr_dir$idx \( -name "*.cpp" -o -name "*.h" \) | xargs grep $ign_case --color=auto "$3"
elif [ "$1" = "cc" ]; then
echo " Search cpp, h and c:"
find $curr_dir$idx -name "*.c" -o -name "*.cpp" -o -name "*.h" | xargs grep $ign_case --color=auto "$3"
elif [ "$1" = "java" ]; then
echo " Search java and aidl:"
find $curr_dir$idx \( -iname "*.java" -o -iname "*.aidl" \) | xargs grep $ign_case --color=auto "$3"
elif [ "$1" = "ccj" ]; then
echo " Search *.c and *.h:"
find $curr_dir$idx \( -name "*.c" -o -name "*.h" \) | xargs grep $ign_case --color=auto "$3"
echo " Search *.cpp and *.java *.aidl:"
find $curr_dir$idx -name "*.cpp" -o -name "*.java" -o -iname "*.aidl" | xargs grep $ign_case --color=auto "$3"
elif [ "$1" = "asm" ]; then
echo " Search assemble ,*.S,*.asm:"
find $curr_dir$idx -iname "*.S" -o -iname "*.asm" -o -iname "*.inc" | xargs grep $ign_case --color=auto "$3"
elif [ "$1" = "mk" ]; then
echo " Search makefile ,*.mk,*.mak, makefile, GNUmakefile, *.pl, *.py:"
find $curr_dir$idx \( -iname "*.pl" -o -iname "*.py" \) | xargs grep $ign_case --color=auto "$3"
find $curr_dir$idx \( -iname "*.mk" -o -iname "*.mak" \) | xargs grep $ign_case --color=auto "$3"
find $curr_dir$idx -iname "makefile" -o -iname "GNUmakefile" -o -iname "*config" -o -iname "*.rc"| xargs grep $ign_case --color=auto "$3"
elif [ "$1" = "log" ]; then
echo " Search *log, *.txt"
find $curr_dir$idx \( -iname "*.log" -o -iname "*.txt" \) | xargs grep $ign_case --color=auto "$3"
else
echo "--->Search default($1 files):"
find $curr_dir$idx -iname "$1" | xargs grep $ign_case --color=auto "$3"
fi
done
fi
相关推荐
1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写的一款用于反映颜色变化的面板...
这些源代码是用于理解和控制ARM硬件行为的基础,通常由C或C++等编程语言编写,有时也会包括汇编语言。 描述中的“嵌入式的简单程序”暗示了这些源代码可能涉及到的是用于嵌入式系统的简单应用。嵌入式系统是那些...
其中,C++源代码文件103个,头文件64个,文本文件53个,汇编文件38个,Markdown文件20个,Rust文件16个,Shell脚本15个,Visual Studio项目文件14个。该项目源码多样,适合不同层次的开发者学习和实践。
ET是一个开源的Unity3D游戏客户端和服务端框架,采用C#和...项目包含1921个文件,涵盖C#源代码、Shell脚本、C/C++代码、文本文件、字节码文件、动态链接库、Excel表格、汇编定义文件、系统对象文件以及Markdown文档等。
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
编译阶段将源代码转换为汇编代码;汇编阶段则把汇编代码转化为机器码;最后,链接器将所有对象文件合并成可执行文件。 在嵌入式系统中,GCC尤为重要,因为它可以生成针对特定硬件平台优化的代码。你将学习如何通过...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
13. **Shell脚本编程**:掌握Bash shell的基本语法,编写简单的脚本进行文件操作、进程控制等任务。 通过分析《UNIX环境高级编程》的源代码,开发者可以深化对UNIX系统特性的理解,提高系统级编程的能力。这份源...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
共计3881个文件,其中包含1568个头文件、1379个C++源文件、312个测试文件、110个源代码文件、88个文本文件、67个CMake配置文件、44个Markdown文件、33个PNG图片文件、32个汇编文件、32个Shell脚本文件。项目涉及多种...
`gcc`(GNU Compiler Collection)是开源的C、C++、Objective-C、Fortran等语言的编译器。通过理解`gcc`的编译选项,如`-c`(编译为对象文件)、`-o`(指定输出文件名)、`-Wall`(开启所有警告)和`-g`(生成调试...