Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 带分组正则表达式的Grep_Regex_Bash - Fatal编程技术网

Regex 带分组正则表达式的Grep

Regex 带分组正则表达式的Grep,regex,bash,Regex,Bash,我写了一个固定的表达: (?<value>(?<=start=)\d+) 如果您希望获得“start=”后面的数字,则不需要命名的捕获组。您甚至不需要捕获括号,这才是-o真正需要做的。 简化: grep -Po '(?<=start=)\d+' grep-Po'(?此处不需要。使用-o选项仅显示与模式匹配的匹配部分,因此结合使用正向lookback断言和-o命令行选项,您不需要捕获组。lookback不使用字符串中的字符,而只使用assERT决定是否可能匹配 echo

我写了一个固定的表达:

(?<value>(?<=start=)\d+)

如果您希望获得“start=”后面的数字,则不需要命名的捕获组。您甚至不需要捕获括号,这才是
-o
真正需要做的。 简化:

grep -Po '(?<=start=)\d+'
grep-Po'(?此处不需要。使用
-o
选项仅显示与模式匹配的匹配部分,因此结合使用正向lookback断言和
-o
命令行选项,您不需要捕获组。lookback不使用字符串中的字符,而只使用assERT决定是否可能匹配

echo 'foo.com/check?var=test&start=11' | grep -Po '(?<=start=)\d+'
# 11

使用
\K
执行正向查找的另一种方法:

echo 'foo.com/check?var=test&start=11' | grep -Po 'start=\K\d+'
11

你到底想要什么?
echo 'some text here:11' | grep -Po '(?<=here:)\d+'
11
echo 'some text here:apple' | grep -Po '(?<=here:)\w+'
apple
echo 'foo.com/check?var=test&start=11' | grep -Po '(?<=start=)\d+'
# 11
grep -Po 'start=\K\d+'
echo 'foo.com/check?var=test&start=11' | grep -Po 'start=\K\d+'
11