使用打印修改进行Bash搜索

时间:2018-03-18 19:17:37

标签: bash grep

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

2 个答案:

答案 0 :(得分:1)

试试这个:

find . -type f -exec bash -c 'grep -q "required data" "$1" && cat "$1"' -- {} \;
  • .当前目录
  • -type f:仅文件
  • -exec:执行
  • 执行:bash{}开始接受$ 1参数,并使用布尔逻辑执行某些操作:true condition && cat fileif condition; then action; fi
  • 的简短版本
  • --选项安全结束
  • {}当前文件占位符
  • \; find的结束语法

答案 1 :(得分:0)

如果该目录中的任何文件包含所需数据,则以下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

search string替换为您要搜索的字符串。您可以直接在命令行上运行它,也可以将其放在bash脚本中然后运行它。

<强>解释

  1. 使用`find`获取所有目录。
  2. 对于上面找到的每个目录,“查找”该目录中的所有文件。
  3. 对于上面找到的每个文件,如果文件包含所需内容,则打印该目录中所有文件的内容并退出该目录。
  4. 如果没有文件包含所需内容,请不执行任何操作。