我正在使用批处理文件进行一些快速的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
但这当然适用于所有事件。
我用谷歌搜索了几个小时,尝试了各种方法来忽略从开始开始的行上的匹配,但没有成功。我觉得这应该很容易,但看不出怎样,有人能给我看魔法吗?
我需要一个像上面这样的衬里来装入批处理文件。
答案 0 :(得分:4)
我不明白为什么这么多人试图把所有东西塞进一个正则表达式
只需添加一个条件语句修饰符,就像这样。 (请注意,您应该对捕获组使用$1
等,而不是\1
等。)
perl -i.bak -pe "s#(\d+/\d+)#\n$1#g unless /^Also started/" tmpFile