grep正则表达式返回实线

Abh*_*kur 2 regex grep

我试图使用grep打印关键字后的所有内容,但命令返回整行.我使用以下内容:

grep -P (\skeyword\s)(.*)
Run Code Online (Sandbox Code Playgroud)

示例行是:

abcdefg         keyword   hello, how are you.
Run Code Online (Sandbox Code Playgroud)

结果应该是,hello, how are you但它给出了整行.我在这里做错了吗?

Avi*_*Raj 6

您需要使用-o(仅匹配)参数和\K(丢弃先前匹配的字符)或正面的lookbehind.

grep -oP '\skeyword\s+\K.*' file
Run Code Online (Sandbox Code Playgroud)

\K保持文本匹配到目前为止整个正则表达式匹配.\s+匹配一个或多个空格字符.

例:

$ echo 'abcdefg         keyword   hello, how are you.' | grep -oP '\skeyword\s+\K.*'
hello, how are you.
Run Code Online (Sandbox Code Playgroud)