查找并修复分为2行的括号

时间:2016-06-28 15:12:54

标签: regex vim

我有一个大文本文件,其中一些括号语句在文件中分成两行,每行以大括号开头和结尾。所以我有一行结束如

(<textA>}\n

,下一行开始

{<textB>)

<textA><textB>相对较短且不会有任何括号,但它们可能包含字母,数字或符号,例如-,。我需要找到这些事件并用

替换它们
(<textA>),(<textB>)

没有换行符。 sedbashperlvim的正则表达式替换将非常有用。

3 个答案:

答案 0 :(得分:2)

在gvim 7.4中,

:%s/}\n{/),(/

在一个简单的测试用例中为我工作。 }\n{是您描述的大括号模式,:%s是全局替代。这是magic设置,这是默认设置。

更具选择性,

:%s/\(([^}]*\)}\n{/\1),(/

将在(textA之前检查}(不包含}\n),并在替换时将该文本(保存在\1中)放回逗号之前。< / p>

答案 1 :(得分:0)

使用sed,我将使用以下命令:

sed '/^([^)]*{/{N;s/{\n}/),(/}'

它测试一行是否与开始模式匹配(以开括号开头的行,后跟非括号字符,以开放的花括号结尾),如果是这样,则将下一行附加到然后,模式缓冲区将{\n}替换为),(

答案 2 :(得分:0)

尝试下面的perl脚本:

ExitWriteLock()

我使用了正则表达式#!/usr/bin/perl use warnings; my $line = <your_input>; print "Before regex : "; print $line; print "\n"; print "After regex : "; $line =~ s/\((.*)}\n{(.*)\)/($1),($2)/g; print $line; print "\n"; - 其演示为here

代码演示为here