我有一个如下的文件,我想要grep为.c
或.cpp
扩展名的行。 我已经尝试使用cat file|grep ".c"
grep,但是我得到所有types的扩展名作为输出。 请说明一下。 提前致谢。
file contents are below: /dir/a/b/cds/main.c /dir/a/f/cmdss/file.cpp /dir/a/b/cds/main.h /dir/a/f/cmdss/file.hpp /dir/a/b/cdys/main_abc.c /dir/a/f/cmfs/file_123.cpp
grep
支持正则表达式。
$ grep -E '\.(c|cpp)$' input
-E
表示“将PATTERN解释为扩展正则表达式” \.
意思是一个点.
()
是一个组 c|cpp
是另一种选择 $
是lineend $ grep -E '\.cp{2}?' testfile1 /dir/a/b/cds/main.c /dir/a/f/cmdss/file.cpp /dir/a/b/cdys/main_abc.c /dir/a/f/cmfs/file_123.cpp $
可能是这个变种会有用的。 这里p{2}
表示'符号p在符号c之后相遇2次'
Android框架定义了一个名为cgrep
的bash函数扩展,它在项目目录中递归地执行,而且比使用grep -r
要快得多。
Usage: cgrep <expession to find>
它只会查询C / C ++头文件和源文件。
function cgrep() { find . -name .repo -prune -o -name .git -prune -o -type f \( -name '*.c ' -o -name '*.cc' -o -name '*.cpp' -o -name '*.h' \) -print0 | xargs -0 gre p --color -n "$@" }
你可以把它粘贴到你的.bashrc
文件中,或者直接在shell中使用inline。