首页 > 解决方案 > 如何打印我从中 grep 一些行的文件名

问题描述

我正在尝试使用以下代码从几个 json 文件中获取一些行:

cat $(find ./*/*/folderA/*DTI*.json) | grep -i -E '(phaseencodingdirection|phaseencodingaxis)' > phase_direction

有效!问题是我不知道哪一行来自哪个文件

有了这个find ./*/*/preprocessing/*DTI*.json -type f -printf "%f\n",我可以打印这些名称,但它们出现在末尾,并且与它们各自的phaseencodingdirection|phaseencodingaxis提取行不按顺序出现。

我不知道如何组合这些代码行来打印从中提取行的文件名及其各自提取的行!?

你可以帮帮我吗?

标签: bashterminalgrep

解决方案


使用文件名作为参数grep而不是cat.

grep -i -H -E '(phaseencodingdirection|phaseencodingaxis)' $(find ./*/*/folderA/*DTI*.json) > phase_direction

即使只有一个文件,该-H选项也会强制在输出中包含文件名。grep

但是由于您的参数find是文件名,而不是递归搜索的目录,因此根本不需要使用它。只需将通配符直接传递给grep. 也没有必要从 . 开始./。任何非绝对路径名都相对于当前目录进行解释。

grep -i -H -E '(phaseencodingdirection|phaseencodingaxis)' */*/folderA/*DTI*.json > phase_direction

推荐阅读