带打印修改的Bash搜索

带打印修改的Bash搜索,bash,grep,Bash,Grep,如果某个目录文件包含所需数据,如何打印该目录所有文件的内容。。。。。使用bash? 我尝试递归地使用“grep”,但它只打印单个文件的内容!怎么办? 例如 如果我有两个目录abc和xyz.abc有一个文件f1.txt(“这是File1”)和f2.txt(“这是File2”)。xyz有一个文件x.txt(“假f1”)和y.txt(“假f2”)。 现在,如果我grep文件1,那么输出应该是: 这是文件1。 这是文件2。请尝试以下操作: find . -type f -exec bash -c 'gr

如果某个目录文件包含所需数据,如何打印该目录所有文件的内容。。。。。使用bash? 我尝试递归地使用“grep”,但它只打印单个文件的内容!怎么办? 例如 如果我有两个目录abc和xyz.abc有一个文件f1.txt(“这是File1”)和f2.txt(“这是File2”)。xyz有一个文件x.txt(“假f1”)和y.txt(“假f2”)。 现在,如果我grep文件1,那么输出应该是: 这是文件1。 这是文件2。

请尝试以下操作:

find . -type f -exec bash -c 'grep -q "required data" "$1" && cat "$1"' -- {} \;
  • 当前目录
  • -类型f
    :仅文件
  • -exec
    :执行
  • 已执行:
    bash
    从以下
    {}
    中获取$1参数,并使用布尔逻辑执行一些操作:
    true条件和&cat文件
    ,if条件的缩写版本;然后行动;fi
  • --
    安全选项结束
  • {}
    当前文件位置持有者
  • \);查找的结束语法

如果目录中的任何文件包含所需数据,则以下bash脚本将打印该目录中所有文件的内容:

find . -type d | while read dir; do find ${dir} -maxdepth 1 -type f | while read file; do if grep -q "search string" ${file}; then cat ${dir}/* 2>/dev/null; break; fi; done; done
搜索字符串
替换为要搜索的字符串。您可以直接在命令行上运行它,也可以将其放入bash脚本中,然后运行它

说明:

  • 使用“查找”获取所有目录。
  • 对于上面找到的每个目录,`find`仅查找该目录中的所有文件。
  • 对于上面找到的每个文件,如果该文件包含所需内容,则打印该目录中所有文件的内容并退出该目录。
  • 如果没有包含所需内容的文件,则不执行任何操作。
    你能解释一下上面命令的每一个术语是什么意思吗(您是否没有得到任何结果或得到的结果不正确?没有得到任何结果我假定您正在正确的目录层次结构中运行此脚本,其中包含预期的文件)是,您将用要搜索的字符串替换
    search string
    。如果要执行不区分大小写的搜索,请将
    -i
    标志添加到
    grep
    。此外,如果要包含符号链接文件,请将
    -L
    标志作为两个
    find
    s的第一个选项。我会这样做:
    bash-c'cat$(grep-L“pattern”$(find.-type f))”