3

我有一个如下文件,我想用 grep 查找具有.c.cpp扩展名的行。我尝试过使用cat file|grep ".c"grep,但我得到了所有类型的扩展作为输出。请对此有所了解。提前致谢。

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
4

4 回答 4

13

grep支持正则表达式。

$ grep -E '\.(c|cpp)$' input
  • -E表示“将 PATTERN 解释为扩展的正则表达式”
  • \.表示一个点.
  • ()是一个组
  • c|cpp是另一种选择
  • $是线端
于 2013-09-13T10:57:47.240 回答
0
$ 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 次”

于 2013-09-13T11:24:22.587 回答
0

您也可以使用--include如下参数

grep --include \*.hpp --include \*.cpp your_search_pattern
于 2020-11-26T20:31:20.770 回答
-1

Android 框架定义了一个名为 bash 的函数扩展cgrep,它递归地进入项目目录,比使用grep -r.

Usage:
cgrep <expession to find>

它仅 greps 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 中使用内联。

于 2013-09-13T11:37:06.480 回答