是否有一个简单的解决方案,也可以提取一个单词之前和之后的一个单词以及匹配的单词?例如,假设以下文本
... 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
但不确定这是否会全部捕获。
答案 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