【问题标题】:Unix grep command to return groups of rows in a textfile where it meets conditionsUnix grep 命令返回满足条件的文本文件中的行组
【发布时间】:2013-04-10 13:08:39
【问题描述】:

我有一个包含以下记录的大文本文件:

024567808 name date etc..
0376567 dfu ugig etc..
0388888 dtg hii etc..
032357 tuth gug etc..
025789 gkh kjkjk etc..

使用 grep 命令,我可以检索包含关键字的行。如果以 03 开头,如何检索下一条记录?

例如,我搜索name,它返回第一行。我想要这条记录以及下一个 02 记录之前的所有 03 行。

输出应该是:

024567808 name date etc..
0376567 dfu ugig etc..
0388888 dtg hii etc..
032357 tuth gug etc..

我认为 grep 对于这类任务来说不够强大。也许 awk 可以做到。做这种事情的最佳方法是什么?

【问题讨论】:

  • 我看到您只标记了 unix、grep 和 find,但是 awk 可能对此有用。这里有一个很好的衬垫列表:catonmat.net/blog/wp-content/uploads/2008/09/awk1line.txt
  • 如果该行包含“John”,是否要搜索“Jo”来匹配?如果您的行是024567808 Bob date Jo etc,您是要搜索“Jo”来匹配还是只在 Jo 出现在第二个字段中时才匹配?
  • 我正在搜索完整的工作作为“名称”
  • 我不知道“我正在搜索完整的工作名称”是什么意思,所以我不知道该评论是否/如何与我的两个问题相关。您能否仅通过一些是/否答案或一些额外的示例输入/输出来澄清?

标签: unix awk grep find


【解决方案1】:

这可能是你想要的:

awk '/^02/{f=0} /name/{f=1} f' file

这完全取决于您是否希望“名称”仅出现在一行的特定位置,以及您是否希望“名称”仅在它不是较长单词的一部分时才匹配,例如是否要搜索“Jo”以匹配“John”?

【讨论】:

  • 非常聪明的回答!!你的声誉6669 看起来不错,我想打破它!所以+1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-08
  • 2017-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-16
相关资源
最近更新 更多