比赛前后的Grep单词?

时间:2016-11-30 09:44:37

标签: regex bash grep

是否有一个简单的解决方案,也可以提取一个单词之前和之后的一个单词以及匹配的单词?例如,假设以下文本

... put returns between paragraphs ...
... the function returns void ...

搜索returns应该返回

put returns between
function returns void

我不是bash专家,但可以将以下内容放在一起

grep -o -P "(?:[a-zA-Z'-]+[^a-zA-Z'-]+){1}returns(?:[^a-zA-Z'-]+[a-zA-Z'-]+){1}" TEXT.FILE

但不确定这是否会全部捕获。

3 个答案:

答案 0 :(得分:2)

告诉grep仅匹配<word> + returns + <word>

$ grep -Eo '\w+ returns \w+' file
put returns between
function returns void

答案 1 :(得分:1)

这应该有效

grep -oP '\w*\s*\breturns\b\s*\w*' file

输入

... put returns between paragraphs ...
... the function returns void ...
returns void 123r
123 4 void returns
123returns

输出

put returns between
function returns void
returns void
void returns

如果在返回之前或之后没有单词将匹配

答案 2 :(得分:0)

returns与左/右的可选字匹配:

grep -o -P '(?:\p{L}+\s+)?returns(?:\s+\p{L}+)?' file

其中\p{L}是“{”的Unicode category

returns与左侧和右侧的必需字词相匹配:

grep -o -P '(?:\p{L}+\s+)returns(?:\s+\p{L}+)' file