如何在模式后 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
解释: 简单的解释就是,使用 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
.
我想从文件中获取用户定义关键字后的字符串。例如,如果关键字是“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
解释: 简单的解释就是,使用 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
.