【问题标题】:find specific words in text files在文本文件中查找特定单词
【发布时间】:2020-02-17 11:00:24
【问题描述】:

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

每个文件包含一行或多行,其中出现“PRO <name>”或“Function <name>”文本。 <name> 后跟一个逗号,后跟变量。

我想生成一个包含 2 列的列表:

  • 第一列:完整文件名(带完整路径)

  • 第二列:“PRO <name>”或/和“函数<name>

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

<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" |排序-z

可能这可以与that answer结合使用。


两个示例文件(“...”是编程代码的占位符):

  • 文件名 1 名为“read_scenes_out.pro”

    PRO READ_SCENES_CLA、ICLA、INDATE=INDATE

    ...

    结束

    PRO READ_TAU_IN、TAU、INFILE=INFILE

    ...

    结束

    FUNCTION READ_HRIT、槽、ChannelId、计数、pgm=pgm

    ...

    结束


  • 文件名 2 名为“read_scenes_in.pro”

    PRO READ_SCENES_FLG、NTEST、INDIR=INDIR、INDATE=INDATE

    ...

    结束

    PRO READ_SCENES_ELEV、IELEV、INDIR=INDIR

    ...

    结束

    PRO READ_TAU_IN、TAU、INFILE=INFILE

    ...

    结束

    FUNCTION READ_HRIT2, slot, ChannelId, counts, pgm=pgm

    ...

    结束

【问题讨论】:

  • 感谢您为您的问题付出了这么多努力。想请您保持您的问题简单,您能否编辑您的问题并更清楚地添加预期的输出,然后让我们知道。

标签: linux bash shell grep find


【解决方案1】:

试试类似的东西

find . -name '*.pro' \
  -exec grep -Eo '(PRO|FUNCTION)[ ]+[^ ,]+' /dev/null {} +

两个字符类 [...] 中的空格由空格和制表符组成。

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

【讨论】:

    猜你喜欢
    • 2012-10-31
    • 2013-08-05
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    相关资源
    最近更新 更多