如何刷新以.c或.cpp结尾的行?

我有一个如下的文件,我想要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。