我要匹配的文件如下:
...
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