• 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
  • 相关阅读:
    AGC037F Counting of Subarrays
    AGC025F Addition and Andition
    CF506C Mr. Kitayuta vs. Bamboos
    AGC032D Rotation Sort
    ARC101F Robots and Exits
    AGC032E Modulo Pairing
    CF559E Gerald and Path
    CF685C Optimal Point
    聊聊Mysql索引和redis跳表
    什么是线程安全
  • 原文地址:https://www.cnblogs.com/liujiaxin2018/p/14969859.html
Copyright © 2020-2023  润新知