如何在模式后grep一个字符串?
Posted
技术标签:
【中文标题】如何在模式后grep一个字符串?【英文标题】:How to grep one string after pattern? 【发布时间】: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 \
【问题讨论】:
awk
, awk '$1 == "yellow_y"print $2' file
似乎是另一种情况
unix.stackexchange.com/questions/13466/…
这里可以正常使用,这是哪个版本的og 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
。
【讨论】:
以上是关于如何在模式后grep一个字符串?的主要内容,如果未能解决你的问题,请参考以下文章
在单词字符和逗号的模式之后grep for contents