如果它们之间没有文本,则用sed删除两行

时间:2014-06-29 03:53:37

标签: awk sed

我有一个包含以下文字的文件:

[Data]

hi

[Data]

one two three

[Data]

[Data]

right left

[Data]

[Data]

我正在寻找如何从sed,awk或其他东西获取此输出:

[Data]

hi

[Data]

one two three

[Data]

right left

说明:我需要查看[Data]和[Data]之间是否没有文本,如果不包含文本,我需要删除[Data]行和下一个空行。

你能帮帮我吗?非常感谢!

5 个答案:

答案 0 :(得分:2)

标题显示为sed但标记为awk,请尝试:

awk '$0==s && p==$0{next} {p=$0}1' s="[Data]" file

这假设在实际数据样本中每隔一行没有空行。

答案 1 :(得分:0)

试试这个:

sed ':a;N;$!ba;s/\n/###/g' file | sed 's/######\[Data\]######\[Data\]/######\[Data\]/g' | sed 's/###/\n/g'

答案 2 :(得分:0)

希望这会有所帮助。

sed ':a;/$/{N;s/\n/#/;ba}' inputFile.txt|sed 's/\]#*\[Data\]/\]/g'|sed 's/#/\n/g

答案 3 :(得分:0)

对于使用GNU awk进行多字符RS和\s [[:space:]]的简写,您可以执行以下操作:

$ awk -v RS='^$' -v ORS= '{gsub(/\[Data\]\s*\[Data\]/,"[Data]")}1' file
[Data]

hi

[Data]

one two three

[Data]

right left

[Data]

我强调" SAY"因为您发布的预期输出与您想要执行的操作(i need to look if between [Data] and [Data] have no text, if not contain text i need to delete the [Data] line and the next empty line.)的描述不匹配,因为它似乎也删除了" [数据]"文件末尾的行。

答案 4 :(得分:0)

这可能适合你(GNU sed):

sed ':a;$!{N;s/\n/&/3;Ta};/^\[Data\][^\n]*\n\n[^[][^\n]*\n$/b;s/\n//;D' file

这样在模式空间中保持4行的滚动窗口,如果找不到预期的模式,则删除前两行,然后将模式空间重新生成最多4行并重复。