我不需要使用特定的语言/程序,只要我可以在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
答案 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