Regex 使用grep命名的捕获组

Regex 使用grep命名的捕获组,regex,grep,capture-group,Regex,Grep,Capture Group,我使用Unix grep。我想知道如何使用它处理命名的捕获组 目前我拥有的是: echo“foobar”| grep-p“(?)ooba(?)” 因此,理论上,我有q=f和w=r,但是我不知道如何使用这些变量或通过管道将它们交给下一个命令(例如awk) 最后,我想得出以下结果: fr 上面的字符串只是一个示例。捕获组可以在任何地方,可以是任意数量,打印也可以是任意顺序。我这样说是因为我并不是在寻找一种提取字符串最后一个和第一个字符的方法,而是一种从字符串中提取尽可能多的变量的方法。我知道像使用-

我使用Unix grep。我想知道如何使用它处理命名的捕获组

目前我拥有的是:

echo“foobar”| grep-p“(?)ooba(?)”

因此,理论上,我有
q=f
w=r
,但是我不知道如何使用这些变量或通过管道将它们交给下一个命令(例如awk)

最后,我想得出以下结果:

fr


上面的字符串只是一个示例。捕获组可以在任何地方,可以是任意数量,打印也可以是任意顺序。我这样说是因为我并不是在寻找一种提取字符串最后一个和第一个字符的方法,而是一种从字符串中提取尽可能多的变量的方法。我知道像使用
-o
\K
(?
grep
这样的技巧无法单独打印捕获的组,但是
sed
可以使用给定的示例

echo "foobar" | sed 's/^\(.\)\(.\+\)\(.\)$/\1 \3/'
f r
字面意思是,匹配第一个字符-字符串的其余部分和最后一个字符。现在您可以从
\1
访问单个捕获的组。
\n
符号


大括号周围使用
\
的原因是
sed
默认使用BRE(基本正则表达式)而不是ERE(扩展正则表达式)可以使用
-E
-r
标志启用。在
POSIX
sed
中不支持ERE,因此答案基本上是通过使用
\
转义来自BRE的ERE令牌来模拟ERE。
sed
中有9个捕获组的限制。但是,
gawk
的情况并非如此>

从您提到的问题中,“而是一种从字符串中提取尽可能多的变量的方法”

sed
如果你必须玩1-9组游戏,则最适合这份工作。如果不是这样,
match
gawk
功能也很有用。(使用与Inian相同的正则表达式)


PS:如果处理的组数超过9,这是一种非常有用的替代方法。此外,对于较小的组数,它工作得很好。另外还有与
awk
的变量紧密耦合的变量,如
NR
OFS
FS
,因此格式化更容易。

grep根本不允许访问捕获组。它会如果你能组成一个。。。
echo "foobar" | awk '{match($0,/^(.)(.+)(.)$/,a);print a[1],a[3]}'
f r