【发布时间】:2015-11-26 16:25:22
【问题描述】:
我正在使用批处理文件进行一些快速的 Perl 搜索,并在安装了 Strawberry Perl v5.22.0 的 Windows 7 上替换某些文件上的内容。
但是,我遇到了一种情况,我不知道该怎么办。
示例文本(如果您想知道看起来很奇怪的数据是什么,它与赛马和偏袒有关):
2/2 FIRST PIGEON, A. R. Boyd's, It (D. Mangos) 3 9/9 BROADWAY, M. C. McTigue's, It (S. M. Miller) 4 17/16 CLEM'S PRIZE (WhipsterCrathie), G. D Shand's
Also started: 13/13 Adele Hanover, 11/12 Apollo King, 12/11 Cushan, 4/4 Fortunate, 6/8 Frosty McCoy.
我想在第一行的“数字斜线号”之前添加换行符,但想忽略第二行的所有相同匹配项。所以结果看起来像:
2/2 FIRST PIGEON, A. R. Boyd's, It (D. Mangos) 3
9/9 BROADWAY, M. C. McTigue's, It (S. M. Miller) 4
17/16 CLEM'S PRIZE (WhipsterCrathie), G. D Shand's
Also started: 13/13 Adele Hanover, 11/12 Apollo King, 12/11 Cushan, 4/4 Fortunate, 6/8 Frosty McCoy.
这种模式在每个文件中出现多次。
因此,在每个数字/数字之前添加换行符很容易
perl -i.bak -pe "s#([0-9]+/[0-9]+.*?)#\n\1#g" tmpFile
但这当然适用于所有事件。
我已经用谷歌搜索了几个小时,并尝试了各种方法来忽略以 Also started 开头的行上的匹配项,但没有成功。我觉得这应该很容易,但看不到怎么做,有人可以给我看看魔法吗?
我需要一个像上面这样的衬里来适应批处理文件。
【问题讨论】:
-
请注意,您的正则表达式模式中的
.*?将不匹配任何内容。它是非贪婪的,因此会匹配尽可能少的字符,这里根本不可能匹配 -
干杯,昨天才发现这个不贪心的东西,还在学习:)