无法使用grep regexp匹配冒号

时间:2016-01-17 18:27:36

标签: regex bash grep

我有一个大的ASCII文件。每行包含一个字段,如:

"id":"N119PM-1442267121-144-0"  

双引号实际上在文件中,而不是我的添加。这些字段以逗号分隔,但它们不一定在行与行之间以相同的顺序出现,这意味着使用cut不是一个可行的选项。

我一直在使用:

grep -o '"id":"[A-Aa-z0-9-]\+' <filename>  

它适用于上面显示的字段类型。但有个问题。大量这些字段看起来像

"id":"JBU19-1442091600-schedule-0000:4"  

换句话说,他们最后有一个额外的冒号和数字。我无法选择包含这些额外字符的字段。

我试过了:

grep -o '"id":"[A-Aa-z0-9:-]\+' <filename>  
grep -o '"id":"[A-Aa-z0-9\:-]\+' <filename>  
grep -o '"id":"[A-Aa-z0-9-]\+\(:[0-9]\+\)' <filename>  

没有成功。任何帮助,将不胜感激。

编辑:我也尝试过将:更改为%然后再搜索%,但这也不起作用。

1 个答案:

答案 0 :(得分:0)

如果您使用的是GNU GREP,则可以在grep命令

中使用-P
grep -oP '"id":"[A-Za-z0-9-:]+"' <filename>
"id":"N119PM-1442267121-144-0"
"id":"JBU19-1442091600-schedule-0000:4"
  

-P, - perl-regexp PATTERN是一个Perl正则表达式