2014-02-14 44 views
0

我并不需要使用特定的语言/节目,只要我能在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”; “事物”实际上并不包含“事”这个词。
+1

行'Thing1'有它上面的空行,它在最终产出。你如何理性化这个? – JaredPar

+0

@JaredPar,我真的只是问同样的问题! –

+0

我认为OP需要另一种方式来表示标题行。 – Sam

回答

0

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

看来你真正想要的是从输出中删除TITLE行和空白行。一个方法来完成这个问题的源文本给予:

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

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

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

第二sed摆脱领先的空白环节,这实际上是样的,否则很难消除的。

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 
0

这里是红宝石的解决方案:

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