Linux 在文本文件中查找特定单词

Linux 在文本文件中查找特定单词,linux,bash,shell,grep,find,Linux,Bash,Shell,Grep,Find,我在不同的子目录中有许多文本文件,每个文件都有文件扩展名.pro 每个文件都包含一行或多行,其中出现text PRO或函数。 后接逗号,后接变量 我想生成一个由两列组成的列表: 第1列:具有完整路径的完整文件名 第二列:PRO或/和功能 对于下面的两个示例文件/脚本,结果文本为: <full path>read_scenes_out.pro PRO READ_SCENES_CLA <full path>read_scenes_out.pro PRO PRO READ_

我在不同的子目录中有许多文本文件,每个文件都有文件扩展名.pro

每个文件都包含一行或多行,其中出现text PRO或函数。 后接逗号,后接变量

我想生成一个由两列组成的列表:

第1列:具有完整路径的完整文件名

第二列:PRO或/和功能

对于下面的两个示例文件/脚本,结果文本为:

<full path>read_scenes_out.pro  PRO READ_SCENES_CLA
<full path>read_scenes_out.pro  PRO PRO READ_TAU_IN
<full path>read_scenes_out.pro  FUNCTION READ_HRIT
<full path>read_scenes_in.pro   PRO READ_SCENES_FLG
<full path>read_scenes_in.pro   PRO READ_SCENES_ELEV
<full path>read_scenes_in.pro   PRO READ_TAU_IN
<full path>read_scenes_in.pro   FUNCTION READ_HRIT2
因为我是Linux的初学者,所以我自己无法解决这个问题。唯一一个小小的成功是找到了如何在所有子目录中列出pro文件的所有完整路径:

找到grep.pro | sort-z

可能是这可以结合

两个示例文件。。。是编程代码的占位符:

名为read\u scenes\u out.pro的文件名1

PRO READ\u SCHENES\u CLA,ICLA,INDATE=INDATE

结束

PRO READ_TAU_IN,TAU,infle=infle

结束

函数读取,插槽,通道ID,计数,pgm=pgm

结束

名为read\u scenes\u in.pro的文件名2

PRO READ\u SCHENES\u FLG,NTEST,INDIR=INDIR,INDATE=INDATE

结束

PRO READ\u SCENES\u ELEV,IELEV,INDIR=INDIR

结束

PRO READ_TAU_IN,TAU,infle=infle

结束

函数读取,插槽,通道ID,计数,pgm=pgm

结束

试试像这样的东西

find . -name '*.pro' \
  -exec grep -Eo '(PRO|FUNCTION)[ ]+[^ ,]+' /dev/null {} +
其中,两个字符类[…]中的空格由空格和制表符组成


grep输出的文件名分隔符是冒号;如果重要的话,通过简单的sed后处理步骤来改变这一点应该不难。或者可以从grep切换到Awk,以更好地控制输出的生成方式。

感谢您在问题中付出了如此多的努力。希望您的问题保持简单,请您编辑您的问题,并简单地添加更清楚的预期输出,然后让我们知道。