【问题标题】:How to grep one string after pattern?如何在模式后grep一个字符串?
【发布时间】:2022-01-08 22:10:43
【问题描述】:

我想在用户定义的关键字之后从文件中获取字符串。例如,如果关键字为“yellow_y”,则预期输出为 acc。

试过grep -oP '(?<=yellow_y).*',但没用。

文件:

yellow      abc \
yellow_x     abc \
yellow_y      acc \
blue     abb \
pink abb \
pink_xx acd \

【问题讨论】:

标签: linux grep


【解决方案1】:

使用您显示的示例,请尝试遵循grep 命令。用 GNU grep 编写和测试。

grep -oP '^yellow_y\s+\K\S+'  Input_file

Online demo for above regex

解释: 简单的解释是,使用 GNU grep-oP 选项,分别用于打印匹配的单词和启用 PCRE 正则表达式。在使用正则表达式匹配条件的主程序中。检查行是否从 yellow_y 开始,后跟 1 个或多个空格,然后使用 GNU grep\K 功能忘记此匹配并匹配 1 个或多个非空格字符,然后将在输出中提供所需的值。

【讨论】:

  • 您知道手册/信息页面中提到 \K 的位置吗?也许这个? perldoc.perl.org/perlre#Extended-Patterns(绝对不会猜到 \K 的意思)
  • @ЯрославРахматуллин,老实说,我是从 SO 本身的大师那里学到的,在您发表评论后,我检查了手册页并提供了帮助,但找不到它(至少在我的 grep 版本中),但在网上搜索我发现这个learnbyexample.gitbooks.io/command-line-text-processing/content/… 有它的网站。但看起来并没有提到太多关于它的细节(尽管他们给出了几个例子)。
  • 谢谢。我根据自己的需要修改它并且它正在工作
【解决方案2】:

要获取acc,也可以在这里使用awk,而不是grep

awk '$1 == "yellow_y"{print $2}' file

这意味着:如果第一个单词(第一个非空白块)是yellow_y,则返回第二个非空白字符块(第二个单词)。

查看online demo

#!/bin/bash
s='yellow      abc \
yellow_x     abc \
yellow_y      acc \
blue     abb \
pink abb \
pink_xx acd \'
awk '$1 == "yellow_y"{print $2}' <<< "$s"

输出为acc

【讨论】:

    猜你喜欢
    • 2015-10-25
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    • 2021-10-12
    相关资源
    最近更新 更多