zoukankan      html  css  js  c++  java
  • sed删除空行(包括由空格组成的空行)

    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$ 
  • 相关阅读:
    php启用zlib压缩文件
    理解MySQL——架构与概念
    二级域名session 共享方案
    SessionID的本质
    PHP核心技术笔记(1):面向对象的核心概念
    改掉这些坏习惯,让你从php菜鸟变php高手
    理解MySQL——索引与优化
    [转]步步教你如何修改OS/400缺省的登陆画面
    [转]Delphi中的线程类
    [转]MSSQL重复记录处理
  • 原文地址:https://www.cnblogs.com/double12gzh/p/10166194.html
Copyright © 2011-2022 走看看