GNU Grep 可以输出选定的组吗?

GNU Grep 可以输出选定的组吗?

是否可以使用 GNU grep 从表达式中获取匹配的组?

例子:

echo "foo 'bar'" | grep -oE "'([^']+)'"

这将输出“'bar'”。但我想只获取“bar”,而不必再通过 grep 发送一次(即获取匹配的组)。这可能吗?

答案1

你可以使用sed它。在 BSD 上sed

echo "foo 'bar'" | sed -E "s/.*'([^']+)'.*/\\1/"

或者,不带-E选项:

sed "s/.*'\([^']\+\)'.*/\1/"

这不适用于多行输入。为此您需要:

sed -n "s/.*'\([^']\+\)'.*/\1/p"

答案2

虽然 grep 无法输出特定的组,但是您可以使用前瞻和后瞻断言来实现您的后续操作:

echo "foo 'bar'" | grep -Po "(?<=')[^']+(?=')"

答案3

您可以使用\K重置和丢弃左侧匹配文本以及未添加到匹配文本的前瞻:

$ echo "foo 'bar'" | grep -oP "'\K[^']+(?=')"
bar

仅限 GNU grep。

相关内容