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/'
我回答这个问题时已经很晚了:)这对结果没有影响,但我还是会更新的。