Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.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
Linux 为什么sed将此替换的结果评估为8?_Linux_Bash_Shell_Sed_Terminal - Fatal编程技术网

Linux 为什么sed将此替换的结果评估为8?

Linux 为什么sed将此替换的结果评估为8?,linux,bash,shell,sed,terminal,Linux,Bash,Shell,Sed,Terminal,我试图让sed输出它在一行文本中看到的第一个数字。下面是我正在使用的命令: sed 's/.*\([0-9]\+\).*/\1/g' 据我所知,这应该告诉sed从stdin获取输入,跳过一组字符,直到它碰到一个数字,匹配并捕获该数字的一个或多个字符,然后跳过行中的其余字符。但是,当我尝试通过管道传输某些内容时,这并不成立: james@DESKTOP-B1DARHA MINGW64 ~/Code/git/corefx (sparse-array-builder) $ tasklist | gr

我试图让
sed
输出它在一行文本中看到的第一个数字。下面是我正在使用的命令:

sed 's/.*\([0-9]\+\).*/\1/g'
据我所知,这应该告诉sed从stdin获取输入,跳过一组字符,直到它碰到一个数字,匹配并捕获该数字的一个或多个字符,然后跳过行中的其余字符。但是,当我尝试通过管道传输某些内容时,这并不成立:

james@DESKTOP-B1DARHA MINGW64 ~/Code/git/corefx (sparse-array-builder)
$ tasklist | grep VBCSCompiler
VBCSCompiler.exe             11080 Console                   33    155,944 K

james@DESKTOP-B1DARHA MINGW64 ~/Code/git/corefx (sparse-array-builder)
$ tasklist | grep VBCSCompiler | sed 's/.*\([0-9]\+\).*/\1/g'
8
我希望第二个命令的输出是
11080
,但它是
8
。既然8不是输入中的第一个或最后一个数字,并且与一组同样匹配的字符组合在一起,为什么会发生这种情况?另外,这里使用的正确regexp是什么


感谢您的帮助。

正则表达式的第一部分是贪婪地尽可能多地匹配,并尽可能少地留给匹配的下一部分,即字符串中的最后一个数字-由于这个数字是内存使用的一部分,它可以在管道的不同执行之间更改

如果将正则表达式的第一部分设置为与任何非数字字符匹配,则它将选择所需的数字:

tasklist | grep VBCSCompiler | sed 's/[^0-9]*\([0-9]\+\).*/\1/'

我回答这个问题时已经很晚了:)这对结果没有影响,但我还是会更新的。