删除两个连续的换行符

时间:2012-03-31 07:08:43

标签: bash sed

我的文件有很多换行符,如下所示:

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 个答案:

答案 0 :(得分:3)

这就是我想到的:

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

背后的想法是:

  • 累积所有连续 empty lines lines endswith '}'
  • }\n*
  • 代替 }
  • 最后一行需要特别考虑。

答案 1 :(得分:1)

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

 }$\n\n

 }

如果您需要以编程方式执行此操作,则应用相同的原则(即使用正则表达式替换字符串),但实际答案显然取决于语言/环境。

答案 2 :(得分: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