我在获得一个多行regex语句时遇到了一些困难。
基本上,我试图删除( -> )后面的空行。匹配多行段有点棘手。到目前为止,我的情况如下:
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?()发布于 2014-04-22 02:23:55
只需用触发器范围逐行处理,删除所有空行作为结束条件:
perl -i -pe '/\) ->\s*$/...!s/^\s*$//' file.txt也许更容易读懂:
perl -i -pe 'm{\) ->\s*$}...!s/^\s*$//' file.txt发布于 2014-04-22 02:15:37
将换行符移出前瞻。试一试
s/\) ->(?=[^\n]*)\n\n/\) ->\n/mg;“前瞻”中的字符在替换中不会被替换.
(事实上,我不明白你为什么需要向前看。
s/\) ->.*\n\n/\) ->\n/mg;同时,任何与前瞻性匹配的非零长度序列也会导致整个模式匹配失败。)
您还可能希望使用/g标志,因为您希望在文档中多次执行此替换。
发布于 2014-04-22 02:43:32
您可以使用此替换:
s/\) ->\R\K\R+//g\R是原子组的快捷方式,它包含几种常见类型的换行符。
\K从匹配结果中移除左侧的所有内容
https://stackoverflow.com/questions/23209135
复制相似问题