linux中如何删除空行

1、测试数据

root@DESKTOP-1N42TVH:/home/test# ls
a.txt
root@DESKTOP-1N42TVH:/home/test# cat a.txt
i A E F

d q d M


d e N f
root@DESKTOP-1N42TVH:/home/test# cat -A a.txt   ## 空行中没有空格或者制表符
i A E F$
$
d q d M$
$
$
d e N f$
root@DESKTOP-1N42TVH:/home/test# sed -n l a.txt
i A E F$
$
d q d M$
$
$
d e N f$

2、sed删除空行

root@DESKTOP-1N42TVH:/home/test# ls
a.txt
root@DESKTOP-1N42TVH:/home/test# cat a.txt
i A E F

d q d M


d e N f
root@DESKTOP-1N42TVH:/home/test# cat -A a.txt
i A E F$
$
d q d M$
$
$
d e N f$
root@DESKTOP-1N42TVH:/home/test# sed '/^$/d' a.txt  ## 直接删除空行
i A E F
d q d M
d e N f
root@DESKTOP-1N42TVH:/home/test# sed -n '/^$/!p' a.txt  ## 不打印空行
i A E F
d q d M
d e N f

3、grep删除空行

root@DESKTOP-1N42TVH:/home/test# ls
a.txt
root@DESKTOP-1N42TVH:/home/test# cat a.txt
i A E F

d q d M


d e N f
root@DESKTOP-1N42TVH:/home/test# cat -A a.txt
i A E F$
$
d q d M$
$
$
d e N f$
root@DESKTOP-1N42TVH:/home/test# grep -v "^$" a.txt  ##不匹配空行
i A E F
d q d M
d e N f
root@DESKTOP-1N42TVH:/home/test# grep "." a.txt  ##匹配有字符的行
i A E F
d q d M
d e N f

4、awk删除空行

root@DESKTOP-1N42TVH:/home/test# ls
a.txt
root@DESKTOP-1N42TVH:/home/test# cat a.txt
i A E F

d q d M


d e N f
root@DESKTOP-1N42TVH:/home/test# cat -A a.txt
i A E F$
$
d q d M$
$
$
d e N f$
root@DESKTOP-1N42TVH:/home/test# awk '!/^$/' a.txt  ## 不匹配空行
i A E F
d q d M
d e N f
root@DESKTOP-1N42TVH:/home/test# awk '$0 ~ "."' a.txt  ##匹配具有字符的行
i A E F
d q d M
d e N f
root@DESKTOP-1N42TVH:/home/test# awk NF a.txt   ## 不太明白
i A E F
d q d M
d e N f

5、tr删除空行

root@DESKTOP-1N42TVH:/home/test# ls
a.txt
root@DESKTOP-1N42TVH:/home/test# cat a.txt
i A E F

d q d M


d e N f
root@DESKTOP-1N42TVH:/home/test# cat -A a.txt
i A E F$
$
d q d M$
$
$
d e N f$
root@DESKTOP-1N42TVH:/home/test# cat a.txt | tr -s "\n"   ##将连续的换行符压缩为一个换行符
i A E F
d q d M
d e N f

6、调整测试数据,空行中包含有空格或者制表符

root@DESKTOP-1N42TVH:/home/test# ls
a.txt
root@DESKTOP-1N42TVH:/home/test# cat a.txt
i A E F

d q d M



d e N f
root@DESKTOP-1N42TVH:/home/test# cat -A a.txt  ## 测试数据,空行中添加了空格和制表符
i A E F$
$
d q d M$
   ^I^I$
^I^I$
   $
d e N f$
root@DESKTOP-1N42TVH:/home/test# sed -n l a.txt
i A E F$
$
d q d M$
   \t\t$
\t\t$
   $
d e N f$

7、利用sed、grep、awk、tr删除空格

root@DESKTOP-1N42TVH:/home/test# ls
a.txt
root@DESKTOP-1N42TVH:/home/test# cat a.txt
i A E F

d q d M



d e N f
root@DESKTOP-1N42TVH:/home/test# cat -A a.txt
i A E F$
$
d q d M$
   ^I^I$
^I^I$
   $
d e N f$
root@DESKTOP-1N42TVH:/home/test# sed '/^$/d' a.txt
i A E F
d q d M



d e N f
root@DESKTOP-1N42TVH:/home/test# grep -v "^$" a.txt
i A E F
d q d M



d e N f
root@DESKTOP-1N42TVH:/home/test# awk '!/^$/' a.txt
i A E F
d q d M



d e N f
root@DESKTOP-1N42TVH:/home/test# cat a.txt | tr -s "\n"    ##均不能删除包含空格或者制表符的行
i A E F
d q d M



d e N f

8、使用sed、awk删除包含空格或者制表符的空行

sed实现

root@DESKTOP-1N42TVH:/home/test# ls
a.txt
root@DESKTOP-1N42TVH:/home/test# cat a.txt
i A E F

d q d M



d e N f
root@DESKTOP-1N42TVH:/home/test# cat -A a.txt
i A E F$
$
d q d M$
   ^I^I$
^I^I$
   $
d e N f$
root@DESKTOP-1N42TVH:/home/test# sed '/^[\t ]*$/d' a.txt  ## sed将包含行开头包含空格或者制表符的行删除
i A E F
d q d M
d e N f
root@DESKTOP-1N42TVH:/home/test# sed '/^\s*$/d' a.txt  ##\s等价于[\t]
i A E F
d q d M
d e N f
root@DESKTOP-1N42TVH:/home/test# sed -n '/^[\t ]*$/!p' a.txt  ## 反向提取
i A E F
d q d M
d e N f

awk实现

root@DESKTOP-1N42TVH:/home/test# ls
a.txt
root@DESKTOP-1N42TVH:/home/test# cat a.txt
i A E F

d q d M



d e N f
root@DESKTOP-1N42TVH:/home/test# cat -A a.txt
i A E F$
$
d q d M$
   ^I^I$
^I^I$
   $
d e N f$
root@DESKTOP-1N42TVH:/home/test# awk '!/^[\t ]*$/' a.txt  ## 反向匹配
i A E F
d q d M
d e N f
root@DESKTOP-1N42TVH:/home/test# awk NF a.txt  ##不太明白
i A E F
d q d M
d e N f
原文地址:https://www.cnblogs.com/liujiaxin2018/p/15769387.html