我使用Unix grep。我想知道如何用它来处理命名的捕获组。
目前这就是我所拥有的:
echo "foobar" | grep -P "(?<q>.)ooba(?<w>.)"
所以从理论上讲,我有q=f
和w=r
,但我不知道如何使用这些变量或将它们交给下一个命令(例如awk)通过管道
最后,我希望得到以下结果:
f r
上面的字符串只是一个例子。捕获组可以是任何地方,可以是任何数量,并且打印也可以是任何顺序。我之所以这样说,是因为我没有专门寻找提取字符串的最后一个和第一个字符的方法,而是一种从字符串中提取尽可能多的变量的方法。我知道使用-o
,\K
或(?<=some text).*?(?=some other text)
这样的技巧,但这些只提取字符串的一部分而不是多个。
答案 0 :(得分:2)
sed
中有9个被捕获的群组受到限制。但是,gawk
不是这种情况。
你提到的问题,“而是一种从字符串”中提取我想要的变量的方法。
如果你必须玩1-9组,那么 sed
最适合这份工作。如果不是match
的{{1}}函数,则gawk
也有帮助。 (使用与Inian相同的正则表达式)
echo "foobar" | awk '{match($0,/^(.)(.+)(.)$/,a);print a[1],a[3]}'
f r
PS:如果处理的组数超过9,这是一种替代方法可能非常有用。此外,对于较少的数字,它可以正常工作。此外,还与awk
,NR
,OFS
等FS
变量紧密相关,因此格式化更容易。
答案 1 :(得分:1)
commentDelegate.updateComment(with: newCount)
无法单独打印捕获的组,但grep
可以使用您的示例,
sed
字面意思是,匹配第一个字符 - 字符串的其余部分和最后一个字符。现在,您可以从echo "foobar" | sed 's/^\(.\)\(.\+\)\(.\)$/\1 \3/'
f r
.. \1
表示法
围绕大括号\n
的原因是因为\
默认使用BRE(基本RegEx)和不 ERE(扩展RegEx),可以使用{ {1}}或sed
标记。 -E
-r
不支持ERE,因此答案基本上通过POSIX