Regex 比赛前后的Grep单词?
是否有一个简单的解决方案,也提取一个单词之前和一个单词之后连同匹配的单词?例如,假设以下文本Regex 比赛前后的Grep单词?,regex,bash,grep,Regex,Bash,Grep,是否有一个简单的解决方案,也提取一个单词之前和一个单词之后连同匹配的单词?例如,假设以下文本 ... put returns between paragraphs ... ... the function returns void ... 搜索将返回 put returns between function returns void 我不是bash专家,但可以总结以下内容 grep -o -P "(?:[a-zA-Z'-]+[^a-zA-Z'-]+){1}returns(?:[^a-zA-Z
... put returns between paragraphs ...
... the function returns void ...
搜索将返回
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
但不确定这是否涵盖所有内容。只要告诉
grep
只匹配+返回+
:
这应该行得通
grep -oP '\w*\s*\breturns\b\s*\w*' file
输入
输出
如果返回之前或之后没有单词,则将匹配要将
返回的与左/右可选单词匹配:
grep -o -P '(?:\p{L}+\s+)?returns(?:\s+\p{L}+)?' file
其中,\p{L}
表示“字母”
要将返回的与左右两侧的所需单词匹配:
grep -o -P '(?:\p{L}+\s+)returns(?:\s+\p{L}+)' file
“\w+返回\w+”
如果前面或后面的单词丢失(字符串的开头/结尾),则不会返回匹配项。。。。或者如果标点符号有干扰。@WiktorStribiżew-yep,我只是把重点放在开始的基本示例上。两侧的(\w+)?
可能会使其更加健壮。@fedorqui如果另一个单词包含字符串返回
,则会匹配该字符串。。。或者单词之间有多个空格。您可以使用grep-oP'(\w+\w+)?返回(\w+\w+)”
文本“返回”时是否有大小写前后没有一个词?@WiktorStribiżew note没有必要使用-P
:-E
就足够了。@fedorqui:它对性能有任何影响吗?@Wiktor我也怀疑使用-P
应该更慢一些,所以我只是运行了一个相当不科学的测试time grep-E'\w+'/dev/null
它需要约0.55秒,而使用-P
的方法需要约0.85秒。
put returns between
function returns void
returns void
void returns
grep -o -P '(?:\p{L}+\s+)?returns(?:\s+\p{L}+)?' file
grep -o -P '(?:\p{L}+\s+)returns(?:\s+\p{L}+)' file