zoukankan      html  css  js  c++  java
  • linux系统中如何将多个连续的空行合并为一个空行

    1、测试数据如下

    [root@centos79 test]# ls
    a.txt
    [root@centos79 test]# cat a.txt
    a g r e
    
    
    
    
    i x k like
    a f g liker
    [root@centos79 test]# cat -A a.txt
    a g r e$
    $
    $
    $
    $
    i x k like$
    a f g liker$

    2、将多个空行合并为一个空行

    [root@centos79 test]# ls
    a.txt
    [root@centos79 test]# cat a.txt
    a g r e
    
    
    
    
    i x k like
    a f g liker
    [root@centos79 test]# awk '{if($0 != ""){print NR,$0} else {print $0}}' a.txt   ## 给非空行加上行号
    1 a g r e
    
    
    
    
    6 i x k like
    7 a f g liker
    [root@centos79 test]# awk '{if($0 != ""){print NR,$0} else {print $0}}' a.txt |uniq  ## 对所有行去重
    1 a g r e
    
    6 i x k like
    7 a f g liker
    [root@centos79 test]# awk '{if($0 != ""){print NR,$0} else {print $0}}' a.txt |uniq|cut -d " " -f 2-  ## 删除行号
    a g r e
    
    i x k like
    a f g liker

    3、修改测试数据, 如果空行中是空格或者水平制表符

    修改后的测试数据:

    [root@centos79 test]# ls
    a.txt
    [root@centos79 test]# cat a.txt
    a g r e
    
    
    
    
    i x k like
    a f g liker
    [root@centos79 test]# sed -n l a.txt
    a g r e$
    $
      $
    		$
    $
    i x k like$
    a f g liker$

    4、将多个空行合并为一个空行

    [root@centos79 test]# ls
    a.txt
    [root@centos79 test]# cat a.txt
    a g r e
    
    
    
    
    i x k like
    a f g liker
    [root@centos79 test]# awk '{if(length != 0){print NR,$0} else {print $0}}' a.txt  ## 以下结果说明 有空格和制表符的空行也会添加行号,因此先删除行首空格和制表符
    1 a g r e
    
    3
    4
    
    6 i x k like
    7 a f g liker

    删除行首空格和制表符:

    [root@centos79 test]# sed -n l a.txt
    a g r e$
    $
      $
    		$
    $
    i x k like$
    a f g liker$
    [root@centos79 test]# sed 's/^s*//g' a.txt |sed -n l  ## 删除行首的空格和制表符
    a g r e$
    $
    $
    $
    $
    i x k like$
    a f g liker$
    [root@centos79 test]# sed 's/^[	 ]*//g' a.txt | sed -n l  ##删除行首的空格和制表符
    a g r e$
    $
    $
    $
    $
    i x k like$
    a f g liker$

    将多个空行合并为一个空行:

    [root@centos79 test]# ls
    a.txt
    [root@centos79 test]# cat a.txt
    a g r e
    
    
    
    
    i x k like
    a f g liker
    [root@centos79 test]# sed 's/^s*//g' a.txt | cat -A  ## 删除行首的空格和制表符
    a g r e$
    $
    $
    $
    $
    i x k like$
    a f g liker$
    [root@centos79 test]# sed 's/^s*//g' a.txt | awk '{if($0 != ""){print NR,$0} else {print $0}}'|uniq  ##将多个空行合并为一个空行
    1 a g r e
    
    6 i x k like
    7 a f g liker
    [root@centos79 test]# sed 's/^s*//g' a.txt | awk '{if($0 != ""){print NR,$0} else {print $0}}'|uniq | cut -d " " -f 2-
    a g r e
    
    i x k like
    a f g liker

    5、补充

    [root@centos79 test]# cat a.txt
    a g r e
    
    
    
    
    i x k like
    
    a f g liker
    [root@centos79 test]# cat -A a.txt
    a g r e$
    $
    $
    $
    $
    i x k like$
    $
    a f g liker$
    [root@centos79 test]# sed -n '/^s*$/p' a.txt | sed -n "$="   ## 统计空行的数目
    5
    [root@centos79 test]# sed -n '/^[	 ]*$/p' a.txt | wc -l      ## 统计空行的数目
    5
    [root@centos79 test]# n=$(sed -n '/^[	 ]*$/p' a.txt | wc -l)
    [root@centos79 test]# echo $n
    5
    [root@centos79 test]# let a=n/2    ## 取循环的次数
    [root@centos79 test]# echo $a
    2
    [root@centos79 test]# cp a.txt a.txt.bak  ## 备份文件
    [root@centos79 test]# for i in `seq $a`; do sed '/^s*$/{n;/^s*$/d}' a.txt -i; done  ## 删除空行
    [root@centos79 test]# cat a.txt
    a g r e
    
    i x k like
    
    a f g liker
  • 相关阅读:
    杨澜给二十几岁的女孩的告诫
    谁的青春不迷茫
    HTML基本元素(二)
    HTML基本元素(一)
    HTML基本结构
    AIO5打印样式函数说明
    AIO5系统中-打印样式常见问题处理
    如何有效的去使用一款免费的ERP
    AIO5物料类型:不允许新增节点
    AIO5程序中审批跳转条件:超过某一个值必须总经理审批
  • 原文地址:https://www.cnblogs.com/liujiaxin2018/p/14969859.html
Copyright © 2011-2022 走看看