正则表达式匹配所有单词对

Ton*_*ony 6 regex grep

我试图从一段文本中获取所有单词对。

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

$ echo "hello dear world" | grep -Eoi "(\w+) +(\w+)"
hello dear 
Run Code Online (Sandbox Code Playgroud)

我想要以下

$ echo "hello dear world" | grep -Eoi [some expression]
hello dear 
dear world
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 5

传统grep不会返回捕获组。

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

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

hello dear
dear world
Run Code Online (Sandbox Code Playgroud)

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

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

hello dear
dear world
Run Code Online (Sandbox Code Playgroud)