相信很多朋友在日常的开发过程中经常要处理一些文本,其中很重要的一部分就是要删除文本中的空行,例如下面的文本( 我现在的开发环境是HP-UX ,在Linux环境同样适用 )
AAAAA
BBBBB
CCCCC
DDDDD
想要得到的结果是:
AAAAA
BBBBB
CCCCC
DDDDD
如果想通过命令删除文本中的空行,可以通过下面的命令实现(本文介绍三种方法):
1.使用grep命令过滤掉文本中为空行的行
grep -vE "^[[:blank:]]*$" filename
解释上面的命令:
首先grep
是一个强大的文本搜索工具,其中选项 -v
代表反向匹配( 代表输出的是不匹配的行 ),选项 -E
代表使用扩展正则表达式。匹配模式部分中 [:blank:]
是POSIX
字符集,匹配的是空格和制表符,^
和 $
分别代表匹配文本的开头和结尾,[ ]
代表匹配中括号中的任意一个字符,*
代表其前面的字符出现0次或多次,所以将这条命令连起来看就是不输出那些由空格或制表符开头并且空格和制表符出现次数不确定的行,需要注意的是如果文本中的空行不是由空白或者制表符造成的,而只是在编写文本时由于输入换行符造成的,那这条命令同样适用。grep
虽然无法直接匹配换行符,但是可以通过grep -E "^$"
实现匹配换行符,所以现在回过头来看上面的那条命令是不是发现了它可以过滤掉文本中不管是由什么原因造成的空行。
2.使用awk命令过滤掉文本中为空行的行
awk '!/^[[:blank:]]*$/{print $0}' filename
awk
命令实现的思路和想法与上述grep
命令完全一样,只是语法不同而已
3.使用sed命令删除文本中的空白行
sed '/^[[:blank:]]*$/d' filename