我有一个大文本文件,其中一些括号语句在文件中分成两行,每行以大括号开头和结尾。所以我有一行结束如
(<textA>}\n
,下一行开始
{<textB>)
<textA>
和<textB>
相对较短且不会有任何括号,但它们可能包含字母,数字或符号,例如-
或,
。我需要找到这些事件并用
(<textA>),(<textB>)
没有换行符。 sed
,bash
,perl
或vim
的正则表达式替换将非常有用。
答案 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)