【问题标题】:Search for multiple words in a file, and for each file print on 1 line - bash在文件中搜索多个单词,并在 1 行上打印每个文件 - bash
【发布时间】:2018-06-26 15:11:39
【问题描述】:

目前我正在使用以下命令在文件中搜索 2 个单词:

grep -r -e word1 -e word2

这会递归地遍历所有子目录,查找哪些文件有 word1、word2(目前所有文件都有 word1 和 word2),并打印匹配的行。问题是当它找到 word1 时,它会打印一个带有它找到的文件名和行的换行符。然后当它找到 word2 时,它会打印一个带有它找到的文件名和行的换行符。所以文件名被打印了两次。

所以输出会是这样的:

file1: word1 ... rest of line
file1: word2 ... rest of line

但我想要这样的东西:

file1: word1 ... rest of line    word2 ... rest of line

word1 和 word2 之间的空格可以是制表符或其他分隔符。

我不想解析我的原始输出并且必须手动将这些行合并在一起。我正在寻找一个使用 bash 一次性完成此操作的命令。

【问题讨论】:

  • 如果 word1 在 file1 和 word2 中出现两次(在不同的行)怎么办?是否应该在具有四个制表符分隔结果的单个输出行上累积?
  • 对于这个问题,我知道所有文件的确切布局。他们遵循一定的格式,你描述的情况不会发生。将只有 1 个“word1”和 1 个“word2”。它们不是单词,它们是唯一的字符串

标签: bash


【解决方案1】:

如果保证每个文件对每个单词只有一个匹配,你可以这样做:

grep -r -e word1 -e word2 <directory> | paste -d " "  - -

【讨论】:

  • @Michael man paste 会比我在这里做得更好:)
猜你喜欢
  • 1970-01-01
  • 2018-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-09
  • 1970-01-01
  • 2017-11-13
相关资源
最近更新 更多