我要匹配的文件如下:

...
new VideoInfo(6, VideoType.Flash, 270, false, AudioType.Mp3, 64, AdaptiveType.None),
new VideoInfo(13, VideoType.Mobile, 0, false, AudioType.Aac, 0, AdaptiveType.None),
new VideoInfo(17, VideoType.Mobile, 144, false, AudioType.Aac, 24, AdaptiveType.None),
... [a few hundred more entries like these]

我有下面的正则表达式模式来匹配第一个数字:
grep "new VideoInfo(.*," VideoInfo.cs

问题是,grep发出的是匹配的整个行,而不仅仅是6 13 17 ...
我怎样才能让它只回显匹配的结果?
编辑:每个new VideoInfo ...行前面都有尾随空格。

最佳答案

使用grep
如果grep支持perl样式regex的-P选项:

$ grep -oP '(?<=new VideoInfo\()[^,]*' file
6
13
17

(?<=pattern)是在后面看。因此,以上匹配regex[^,]*但前提是该regex前面有new VideoInfo\(
使用sed
sed很适合这个问题:
$ sed -nr 's/[[:space:]]*new VideoInfo\(([^,]*),.*/\1/p' file
6
13
17

使用bash
$ re='new VideoInfo\(([^,]*)'
$ while read -r line; do [[ $line =~ $re ]] && echo "${BASH_REMATCH[1]}"; done< file
6
13
17

07-26 03:47