是否可以使用 GNU grep 从表达式中获取匹配的组?
例子:
echo "foo 'bar'" | grep -oE "'([^']+)'"
Run Code Online (Sandbox Code Playgroud)
这将输出“'bar'”。但我只想得到“bar”,而不必再通过 grep 发送一次(即获取匹配的组)。那可能吗?
jtb*_*des 55
您可以sed为此使用。在 BSD 上sed:
echo "foo 'bar'" | sed -E "s/.*'([^']+)'.*/\\1/"
Run Code Online (Sandbox Code Playgroud)
或者,没有-E选项:
sed "s/.*'\([^']\+\)'.*/\1/"
Run Code Online (Sandbox Code Playgroud)
这不适用于多行输入。为此,您需要:
sed -n "s/.*'\([^']\+\)'.*/\1/p"
Run Code Online (Sandbox Code Playgroud)
小智 30
虽然 grep 无法输出特定组,但您可以使用先行和后行断言来实现您的目标:
echo "foo 'bar'" | grep -Po "(?<=')[^']+(?=')"
您可以使用\K重置和丢弃左侧匹配文本以及未添加到匹配文本的前瞻:
$ echo "foo 'bar'" | grep -oP "'\K[^']+(?=')"
bar
Run Code Online (Sandbox Code Playgroud)
仅限 GNU grep。
| 归档时间: |
|
| 查看次数: |
79854 次 |
| 最近记录: |