【问题标题】:Grepping exact value but printing entire lineGrepping 精确值但打印整行
【发布时间】:2014-10-20 11:07:02
【问题描述】:

我有一个 2 列制表符分隔的文件,我需要从中获取特定信息。 该文件如下所示:

wych_hazel    agt|plt
wytensin    agt
x    agt|com|qud
xanax    agt
xtc    agt
xylocaine    agt
yellow_jacket    agt|anm

我需要从第二列开始 grep,那些只有值 agt 的行。

期望的输出是这样的:

wytensin    agt
xanax    agt
xtc    agt
xylocaine    agt

我试过了:

grep -e 'agt' input

这给了我:

wych_hazel    agt|plt
wytensin    agt
x    agt|com|qud
xanax    agt
xtc    agt
xylocaine    agt
yellow_jacket    agt|anm

那我试过了:

grep -oh 'agt' input

这给了我:

agt
agt
agt
agt
agt
agt
agt

我应该引入哪些grep 参数才能达到我想要的结果?

【问题讨论】:

  • grep agt$ input 应该这样做。
  • @PaulR 您应该将您的评论作为答案。

标签: grep pattern-matching


【解决方案1】:

这是awk 的工作:告诉它查找第二个字段正好是agt 的那些行:

$ awk '$2=="agt"' file
wytensin    agt
xanax    agt
xtc    agt
xylocaine    agt

grep 中,您还可以检查是否存在空格,然后检查agt 周围的行尾:

grep '\sagt$' file

【讨论】:

  • 感谢@fedorqui 的提示我没想过使用awk解决这个问题,但它也是一个很好的解决方案。
【解决方案2】:

如果agt 始终位于行尾,那么您可以这样做:

grep agt$ input

【讨论】:

  • 请注意,您可能希望在单词本身的前面添加一些条件,以防止匹配行如“hello xxxxagt”。在我的回答中,我添加了\s,因此之前需要出现空格或制表符。
  • @fedorqui:是的,确实 - 这会更强大 - 我只是根据 OP 提供的样本数据寻求“极简主义”解决方案。
【解决方案3】:

将字边界与-E 参数一起使用。

grep -E '^[^ ]+\s+.*\sagt$' file

【讨论】:

    猜你喜欢
    • 2012-12-22
    • 2018-05-06
    • 1970-01-01
    • 2011-03-14
    • 2022-06-15
    • 2018-05-09
    • 1970-01-01
    • 2016-12-20
    • 2020-10-12
    相关资源
    最近更新 更多