我写了一个常规的exprssion:
(?<value>(?<=start=)\d+)
我在Exprsso中测试了它并且它有效 当Itried在BASH脚本中使用它时,没有结果,但是数据与使用Expresso的测试中的数据相同。可以和grep一起使用,并返回数组吗?
grep -Po "(?<value>(?<=start=)\d+)" page.txt > result.txt
这是用它的方式吗?
编辑 - 示例数据(工作)
www.example.com/check?var=test&start=11
答案 0 :(得分:2)
此处不需要Named Capturing Group。使用-o
选项仅显示与模式匹配的匹配部分,因此使用 Positive Lookbehind 断言和-o
命令行选项的组合,您不需要捕获组。 lookbehind不消耗字符串中的字符,但只断言匹配是否可能。
echo 'foo.com/check?var=test&start=11' | grep -Po '(?<=start=)\d+'
# 11
或者,\K
重置报告的匹配的起始点,并且不再包括任何以前消耗的字符。例如抛弃与此相匹配的所有内容。
grep -Po 'start=\K\d+'
答案 1 :(得分:1)
如果您希望获取“start =”之后的数字,则不需要命名的捕获组。你甚至不需要捕捉括号,这正是-o
所做的。
简化:
grep -Po '(?<=start=)\d+'
答案 2 :(得分:0)
使用\K
进行积极观察的另一种方式:
echo 'foo.com/check?var=test&start=11' | grep -Po 'start=\K\d+'
11