bash中的Perl oneliner:从复杂的regexp打印匹配

时间:2017-02-08 13:46:02

标签: regex bash perl

我有这个复杂的正则表达式

vars()

我需要解析一个文件(全部在一行上)并仅输出匹配的组,如

/"_outV":([0-9]+),"_inV":([0-9]+),"_label":"([a-z\/]+)",/

目前唯一几乎正常工作在线人

print $1 $2 $3

但是在比赛结束后,它最终也会在最后回复整个文件。 我该如何解决这个问题?

我虽然删除perl -pe 'while(m/"_outV":([0-9]+)\,"_inV":([0-9]+)\,"_label":"([a-z\/]+)\"\,/g){print "$1 $2 $3\n";}' 选项会成功,但事实并非如此。

1 个答案:

答案 0 :(得分:2)

对我来说很好看。 您需要使用-phere is why 替换 -n

一些更好的观点:

  • 无需对,"进行反斜杠。
  • 您可以方便地将[0-9]替换为\d
  • 通过为正则表达式使用不同的分隔符,您不需要转义/

最终结果优化

perl -ne 'print "$1 $2 $3\n" while m{"_outV":(\d+),"_inV":(\d+),"_label":"([a-z/]+)",}g'