【发布时间】:2016-07-31 16:55:46
【问题描述】:
这是MyTextString.txt的简化描述:
注意:BlaBla 代表任何字符,包括换行符。
START BlaBla-In END BlaBla-Out-Between START BlaBla-In END BlaBla-Out- START BlaBla-In END BlaBla-Out-Between START BlaBla-In END ...
我正在寻找删除 END 和 START (BlaBla-Out-Between) 之间的文本 以得到如下结果:
START BlaBla-In END 换行 START BlaBla-In END 换行 START BlaBla-In END 换行符 START BlaBla-In END ...
我有一个 perl 文件 changes.pl:
BEGIN {
@ARGV = map glob("\"$_\""), @ARGV;
}
s/(END).*?(START)/$1\n$2/sg; #TEST
我应该使用这个 CMD 行来执行我的替换:
perl -i.bak -p changes.pl My/File/Directory/MyTextString.txt
注意:changes.pl 和 CMD 行 与其他正则表达式查找和替换字符串一样,如 question 中所述。
但是对于这个 RegEx 字符串,MyTextString.txt 不会发生任何修改:
s/(END).*?(START)/$1\n$2/sg;
我认为关于我的正则表达式语法的一切都很好,因为它在 regex 101 tester 上运行良好。
我正在寻找使用提到的 changes.pl 和 CMD 行 匹配和替换 任何字符(包括换行符)。简单地说,我正在寻找用 newline 替换 BlaBla-Out-Between。
【问题讨论】:
-
在进行替换之前,您需要将整个文件转换成一个字符串。
-p命令行开关一次只读取一行 -
@HåkonHægland 没错.. 需要在变量中读取整个文件