sed删除空行(包括由空格组成的空行)

18 篇文章 0 订阅
sed实战之——删除空行(包括由空格组成的空行)

首先要隆重介绍我们的测试文件,因为这是非常特殊的文件:
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$ 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值