如何在模式后 grep 一个字符串?

How to grep one string after pattern?

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

尝试了 grep -oP '(?<=yellow_y).*' 但没有用。

文件:

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

使用您显示的示例,请尝试执行以下 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 个或多个非空格字符然后将提供所需的值在输出中。

要得到acc,这里也可以用awk代替grep:

awk ' == "yellow_y"{print }' file

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

看到一个 online demo:

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

输出为 acc.