代码之家  ›  专栏  ›  技术社区  ›  wmitchell

bash find链接到grep,然后打印

  •  7
  • wmitchell  · 技术社区  · 14 年前

    我有一些数据文件的一系列索引文件,它们基本上采用了这种格式

    索引文件:asdfg.log.1234.2345.index

    数据文件:asdfg.log

    其思想是搜索所有的索引文件。如果值XXXX出现在索引文件中,请将其对应的数据文件变灰并打印出值XXXX出现的数据文件中的行。

    到目前为止,我只需搜索索引文件中的值XXXX,例如

    find . -name "*.index" | xargs grep "XXXX"     // Gives me a list of the index files with XXXX in them
    

    如何使索引文件匹配,然后将其对应的数据文件grep?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Jonathan Leffler    14 年前

    这能起作用吗?

    find . -name '*.index' |
    xargs grep -l "XXXX" |
    sed 's/\.log\.*/.log/' |
    xargs grep "XXXX"
    

    这个 find 命令来自您的示例。第一 xargs grep 只列出(索引)文件名。这个 sed 将文件名映射到数据文件名。第二 萨尔格斯 然后扫描数据文件。

    您可能需要插入 sort -u 后一步 塞德 步骤。

        2
  •  0
  •   ghostdog74    14 年前
    grep -l "XXXX" *.index | while read -r FOUND
    do
       if [ -f "${FOUND%.log*}log" ];then
          grep "XXXX" "$FOUND"
       fi
    done