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$ 

你可能感兴趣的:(ubuntu,google,测试)