删除所有行,并在其两侧留空行

时间:2014-02-14 18:54:02

标签: regex text

我不需要使用特定的语言/程序,只要我可以在Linux上运行它,但这就是我所拥有的:


TITLE1 - this is my title with some text next to it

Thing1        1        Thing2        2
Thing3        3        Thing4        4

TITLE2 - this is my title with some text next to it

Thing5        5        Thing6        6
Thing3        3        Thing7        7

我想要删除任何一行都有空行的行,所以结果会是这样的:

Thing1        1        Thing2        2
Thing3        3        Thing4        4
Thing5        5        Thing6        6
Thing3        3        Thing7        7

编辑#1

  1. TITLE1上面有一个空行,但我不知道如何使用缩进显示它,但是,在顶部插入一个空白行非常简单。
  2. 我没有写这个结构,它已作为输入提供给我,它有数以千计的条目。
  3. “TITLE”实际上并不包含“TITLE”字样; “事物”实际上并没有包含“Thing”这个词。

4 个答案:

答案 0 :(得分:0)

您在问题中列出的所需结果与主题不一致。 TITLE1行上方没有空行,但不在结果文本中。以Thing1开头的行在其上方有一个空白行,但不在其下方,并且在结果文本中。

您真正想要的是从输出中删除TITLE行和空行。鉴于问题中的源文本,有一种方法可以实现这一目标:

egrep -v '^[A-Z]{2}' filename | egrep -v '^$'

答案 1 :(得分:0)

Pfft。所有这些人都感到不安,因为有一个例外......第一行。当然,您可以这样做,即使考虑到第一行例外:

sed -rz 's/(^|\n*)[^\n]*\S[^\n]\n//g' input.txt | sed -rz 's/^\s*\n+//'

第二个sed删除了一个前导空白链接,否则实际上很难消除。

答案 2 :(得分:0)

awk version here适用于您的输入。

awk '$2' ORS='\n' FS='\n' RS= input_file

原则上,这应该与关于deleting sets of 2 or 3 blank lines的一些问题类似,但是下面的实现没有按预期工作(仅匹配第一个标题行,并删除了文件的最后一行)。那些经常阅读多行到模式空间的人的想法?

$ sed '1N; N; s/^\n.*[a-z].*\n$/blargh/g ; P; D' input_file
blargh
Thing1        1        Thing2        2
Thing3        3        Thing4        4

TITLE2 - this is my title with some text next to it

Thing5        5        Thing6        6

答案 3 :(得分:0)

以下是ruby的解决方案:

s = """
TITLE1 - this is my title with some text next to it

Thing1        1        Thing2        2
Thing3        3        Thing4        4

TITLE2 - this is my title with some text next to it

Thing5        5        Thing6        6
Thing3        3        Thing7        7

TITLE1 - this is my title with some text next to it

Thing1        1        Thing2        2
Thing3        3        Thing4        4

TITLE2 - this is my title with some text next to it

Thing5        5        Thing6        6
Thing3        3        Thing7        7
"""
r = /^\n.*\S+.*\n^\n/
out = s.gsub(r, '')
print out

以下链接可查看此操作:http://rubular.com/r/uFl75LdAkS