如何在bash中列出具有特定字符串的文件组?

时间:2013-09-10 08:11:55

标签: linux shell

我想从目录(具有多个目录)列出具有诸如“hello”,“how”和“todo”等EXACT字符串的文件。另外,我只想列出c(.c)和cpp(.cpp)文件。 我尝试了grep -Rgrep -R "hello" /home)但不满意。请帮助我增强grep -R命令或任何其他方式。提前谢谢。

3 个答案:

答案 0 :(得分:2)

如果您想查找文件,通常可以使用find

如果您要查找其内容中包含字符串“hello”,“how”或“todo”的所有.cpp.-c文件,请使用以下内容:

find /home \( -name "*.c" -or -name "*.cpp" \) \
    -exec egrep -l "(hello|how|todo)" \{\} \;

如果您要查找包含字符串“hello”,“how”或“todo”的所有.cpp.-c文件,请使用以下内容:

find /home                                                       \
   \( \( -name "*.c" -or -name "*.cpp" \)                        \
      -and                                                       \
      \( -name "*hello*" -or -name "*how*" -or -name "*todo*" \) \
   \)

引用了一些引用(使用\),因为(){};被shell视为特殊字符...

答案 1 :(得分:0)

事实上,grep本身就可以了。

但我强烈建议 ack-grep 。它是grep的一个很好的替代品,可以满足您的需求。

你可以找到它here

使用ack-grep就像

一样简单
ack-grep --cc --cpp "(hello|how|todo)"

答案 2 :(得分:0)

您可以尝试以下方法:

      grep -rn --include={*.c,*.cpp} yourdirectory -e ^h[a-z]*

这将搜索所有具有.c和.cpp扩展名的文件,并从指定的目录中找到以h开头的模式(您需要自己准备以满足您的需要)。