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
  • 相关阅读:
    洛谷 P3613 【深基15.例2】寄包柜
    洛谷 P1478 陶陶摘苹果(升级版)
    P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G
    c++优先队列(priority_queue)用法详解
    洛谷 P3817 小A的糖果
    洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    洛谷 P1449 后缀表达式
    洛谷 P1106 删数问题
    在Linux中使用tomcat部署项目
    jar在linux上运行脚本 #start #stop #restart
  • 原文地址:https://www.cnblogs.com/liujiaxin2018/p/14969859.html
Copyright © 2011-2022 走看看