我有一个包含以下文字的文件:
[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]行和下一个空行。
你能帮帮我吗?非常感谢!答案 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行并重复。