shell知识库[3]: Linux系统中使用shell如何删除文件中所有空行的几种方法?

栏目:shell知识库 作者:admin 日期:2018-10-23 评论:0 点击: 613 次

1 Linux文件和windows文件在 换行符的区别

Linux或Unix文件,和windows文件,在来回处理时,如果不注意换行符的区别,可能导致程序错误!
在早期的打印机时代,开始新的一行要占用两个字符的时间。如果到了一行的结尾处,你要快速回到新的一行的开头,需要打印针头在纸面上飞快地掠过,常常会在纸面上留下污点。解决这个问题的办法就是,用两个字符:一个字符<Return>来移到第一列,另一个字符<Line feed>来新增一行。计算机产生以后,存储较为昂贵,在如何解决回车换行这个老问题上,人们产生了不同的意见。UNIX人认为在到达一行的结尾时新增一行<Line feed> (LF),而Mac人则认同<Return> (CR)的解决办法,MS则坚持古老的<Return><Line feed> (CRLF)的方法。这就意味着如果你将一个文件从一个系统转移到另一个系统,就面临着回车换行的问题。

2 正则表达式匹配空行

^\s*$ :匹配空行,其中^表示行首,\s表示空字符,包括空格和制表符,*重复0到n个前面的字符,$表示行尾。连起来就是匹配只有空字符的行,也就是空行。

3 linux下删除文本中所有空行的几种方法

方法一:利用grep删除空行
grep -v '^\s*$' test.txt
注:-v表示将匹配的结果进行反转,正则表达式匹配空行。(空行可包括空格符制表符等空白字符)

方法二:利用sed删除空行
sed '/^\s*$/d' test.txt
简单解释一下:
/ :分隔符
^\s*$ :匹配空行,其中^表示行首,\s表示空字符,包括空格和制表符,*重复0到n个前面的字符,$表示行尾。连起来就是匹配只有空字符的行,也就是空行。
/d :删除该行
方法三:利用awk删除空行
awk NF test.txt
注:NF代表当前行的字段数,空行的话字段数为0,被awk解释为假,因此不进行输出。
以上三种方式均可处理包含空白字符(空格符,制表符等)的空行。
方法四:若空行均由'\n'造成(unix格式的文件行尾则以\n来标识),则还可以利用tr命令去除空行。
tr -s '\n' < test.txt
注:-s代表将多个连续的字符压缩成一个字符,这里是将多个'\n' 压缩成一个'\n',达到去除空行的效果。

shell知识库[3]: Linux系统中使用shell如何删除文件中所有空行的几种方法?:等您坐沙发呢!

发表评论