Shell脚本删除空行旁边的行

时间:2015-05-06 06:09:01

标签: linux bash shell sed grep

我可以使用grepsed从文件中删除空行。但是,我无法解决我必须删除空行旁边的有效行的情况。以下是一个例子:

来源:

1_1
1_2
1_3
1
2_1
2_2
2_3
2_4
2_5
2

3
4_1
4_2
4
5_1
5_2
5_3
5_4
5



6
7_1
7
8_1
8_2
8

输出:

1_1
1_2
1_3
1
2_1
2_2
2_3
2_4
2_5
2
4_1
4_2
4
5_1
5_2
5_3
5_4
5
7_1
7
8_1
8_2
8

如何删除空行旁边的有效行?

3 个答案:

答案 0 :(得分:5)

尝试类似:

sed '/^$/,+1 d' test.txt

每当找到空行时,请将其删除,然后删除下一行。

答案 1 :(得分:2)

以下是awk解决方案:

awk '!NF {f=1;next} f {f=0;next}1' file
1_1
1_2
1_3
1
2_1
2_2
2_3
2_4
2_5
2
4_1
4_2
4
5_1
5_2
5_3
5_4
5
7_1
7
8_1
8_2
8

!NF {f=1;next}如果行为空,请设置f=1并跳过该行 然后,如果line不为空,请测试f是否为真 {f=0;next}如果为真,请设置f=0并跳过该行 1打印剩下的一行。

ED做了一些gofling

awk 'NF&&!f;{f=!NF}' file

答案 2 :(得分:1)

marks
  • Posix版本
  • 删除所有连续的空行和下一个(非空的)