首页 > 解决方案 > 正则表达式匹配所有单词对

问题描述

我正在尝试从一段文本中提取所有单词对。

我有以下正则表达式(\w+) +(\w+),我在一段没有标点符号的文本上运行。我的问题是这不考虑所有可能的对

$ echo "hello dear world" | grep -Eoi "(\w+) +(\w+)"
hello dear 

我想要以下

$ echo "hello dear world" | grep -Eoi [some expression]
hello dear 
dear world

标签: regexgrep

解决方案


传统grep不会返回捕获组。

您可以考虑pcregrep使用前瞻和 2 个捕获组:

echo "hello dear world" | pcregrep -o1 -o2 '(\w+)(?=(\h+\w+))'

hello dear
dear world

如果你没有,pcregrep那么你可以使用这个简单的awk

awk '{for (i=1; i<NF; ++i) print $i OFS $(i+1)}' <<< "hello dear world"

hello dear
dear world

推荐阅读