【发布时间】:2014-05-13 10:22:13
【问题描述】:
我想使用一个简单的 bash 语法来 grep 范围内的数字。例如。从短语
range "7.2-55.0"
我想保存 start=7.2 和 end=55.0。
因为我知道一些 perl 正则表达式 (pcre),所以我尝试了:
echo 'range "7.2-55.0"' | pcregrep -o '^range \"(\S+)\"'
echo 'range "7.2-55.0"' | pcregrep -o '^range \"([0-9.-]+)\"'
这是行不通的。输出是整行。那我的错是什么?是否可以使用pcregrep 保存 2 个匹配组?
在搜索网页时,我发现了例如pcregrep -o1 但我似乎有另一个版本的工具,因为我只被允许使用 -o 选项(GNU Bash-3.2)。
【问题讨论】:
-
不匹配任何内容。
\K代表什么? -
顺便说一句。
grep -P和pcregrep一样吗? -
不是 pcregrep 专家,但似乎没有只返回第一个捕获组的功能。从man page 开始,
-o选项只会让它返回找到匹配项的那一行——无论如何,你的匹配就是整行。 -
@Robin 那时可能有不同的版本,因为我在网上的示例中看到了
-o1和-o2选项。顺便提一句。我发现pcregrep应该比grep -P或grep -E快。 -
这是我开始考虑用 perl、awk 等做所有事情的地方,这样我就不必运行许多倍数的命令来提取所有细节(一组子进程每个值)。