sed实战之——删除空行(包括由空格组成的空行)

sed实战之——删除空行(包括由空格组成的空行)

2011-01-21 星期五 晴朗

首先要隆重介绍我们的测试文件,因为这是非常特殊的文件:

forrest@ubuntu:~/Public$ cat -v wuhui.txt 

1^M

^M

2^M

  ^M

3^M

    ^M

4^M

          ^M

5^M

                ^M

6^M

                        ^M

                  ^M

我用cat -v选项,显示不可见字符。^M是换行的意思。不过这是不正常的。正常的文件换行符用-v也是看不到的。

这里如下四种空行:

1、单独一个换行符

2、N个空格+换行

3、N个TAB+换行

4、N个(空格&TAB)+换行

对于这个文件,如果使用:

forrest@ubuntu:~/Public$ sed /^$/d wuhui.txt

1

2

  

3

   

4

          

5

                

6

                        

                  

forrest@ubuntu:~/Public$ 

是没有效果的。因为由于特殊字符的存在,空行并不是真的空行(^$)。Google了一下,可以使用这个命令来匹配:

forrest@ubuntu:~/Public$ sed /^[[:space:]]*$/d wuhui.txt

1

2

3

4

5

6

forrest@ubuntu:~/Public$ 

[[:space:]]表示空格或者tab的集合,这里有点意外的是居然匹配了^M这个不可见的换行符号。另外,注意到[[:space:]]后面跟着一个*,表示匹配0个或多个。

[[:space:]]可以用/s表示,如下:

forrest@ubuntu:~/Public$ sed '/^/s*$/d' wuhui.txt

1

2

3

4

5

6

forrest@ubuntu:~/Public$

但是使用转义字符,一定要对命令添加引号:

forrest@ubuntu:~/Public$ sed /^/s*$/d wuhui.txt

1

2

  

3

   

4

          

5

                

6

                        

                  

forrest@ubuntu:~/Public$ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值