我在使用多行正则表达式语句为我工作时遇到了一些麻烦。
基本上,我试图删除a)后面的空行 - >。匹配多线部分有点棘手。这就是我到目前为止所拥有的:
perl -00 -p -i -e 's/\) ->(?=[^\n]*\n\n)$/\) ->\n/m' $filename
这是我的输入/输出:
Input:
setUp =
config: (cb) ->
randomFunction (cb)->
cb?()
nestedObject:
key: (cb) ->
cb?()
Output:
setUp =
config: (cb) ->
cb?()
nestedObject:
key: (cb) ->
cb?()
答案 0 :(得分:2)
将换行符移出前瞻。尝试
s/\) ->(?=[^\n]*)\n\n/\) ->\n/mg;
前瞻中的字符不会替换为替换。
(实际上,我不明白为什么你甚至需要展望。
s/\) ->.*\n\n/\) ->\n/mg;
也可以完成这项任务,任何与前瞻相匹配的非零长度序列也会使整个模式匹配失败。)
您也可能想要使用/g
标志,因为您希望在文档中多次执行此替换。
答案 1 :(得分:2)
只需使用触发器范围逐行处理,删除所有空白行作为结束条件:
perl -i -pe '/\) ->\s*$/...!s/^\s*$//' file.txt
也许更容易阅读:
perl -i -pe 'm{\) ->\s*$}...!s/^\s*$//' file.txt
答案 2 :(得分:2)
您可以使用此替代品:
s/\) ->\R\K\R+//g
\R
是原子组的快捷方式,包含几种常见类型的换行符
\K
从匹配结果