Perl单行命令正则移除指定行区间内容失效,求解决方案
解决Perl单行命令跨多行正则匹配失效的问题
你的问题核心在于Perl默认的文本处理模式:
- 默认
-p选项是逐行读取并处理文本,你的正则需要跨多行匹配,自然找不到符合条件的内容 - regex101默认将整个文本作为单个字符串处理,所以能正常匹配
修正后的命令如下:
perl -0777 -pe 's/(^\d\. .*)\n(.*\n)*?(Province|Limbourg)/$1\n$3/gm'
关键参数说明:
-0777:让Perl一次性读取整个文件,而非逐行拆分,确保跨多行的内容能被正则捕获gm修饰符:g:全局匹配所有符合规则的片段m:启用多行模式,让^和$匹配每行的开头/结尾(而非整个文本的首尾)
替换逻辑里的$1和$3对应正则的捕获组,分别保留开头的数字行和结尾的Province/Limbourg行,中间内容被自动移除。
内容的提问来源于stack exchange,提问作者Gilles San Martin
相关产品推荐
相关产品推荐

