2012-03-31 35 views
0

我的文件中有很多换行的,就像这样:卸下两个连续的换行符

This is a line. 

This is another line. 

我想删除,但只在第一线与}结束的情况下,例如:

\macro{This is a line.} 

This is another line. 

这应该成为:

\macro{This is a line.}This is another line. 

如何删除换行符在这种情况呢?

回答

3

这是我想通了:

$ sed -n '/}$/{h;:a;n;/^$\|}$/{H;$!ba};H;g;[email protected]}\n*@}@g};p' input.txt 

背后的想法是:

  • 累加所有的连续empty lineslines endswith '}'
  • 替代}\n*}
  • 最后一行需要特别注意。
1

您可以使用支持正则表达式的编辑器并在您的文件中进行替换。替换:

}$\n\n 

} 

如果您需要以编程方式做到这一点,同样的原则也适用(即使用字符串替换正则表达式),但实际的答案显然将取决于语言/环境。

+0

我的很多文件对于文本编辑器来说打开太大了,而且我还需要从许多文件中删除这些文件,因此这主要是自动完成的atically。 – Village 2012-03-31 07:24:26

+0

对不起,我之前没有注意到bash/sed标签 – BluesRockAddict 2012-03-31 07:51:20

1

这可能会为你工作:

sed '$!N;s/}\n$/}/;P;D' file 

如果有涉及的空白,尝试:

sed '$!N;s/}\s*\n\s*$/}/;P;D' file 

或更正式的:

sed '$!N;s/}[[:space:]]*\n[[:space:]]*$/}/;P;D' file