相信很多朋友在日常的开发过程中经常要处理一些文本,其中很重要的一部分就是要删除文本中的空行,例如下面的文本( 我现在的开发环境是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
sed
命令实现原理与上面两个命令大同小异,值得一提的就是sed
表达式中的命令d
是代表删除,删除文件中的空白行
- 结尾
本文中提到了三种去除文本中空行的方法,但是具体问题还应具体分析,如果可以确定文件造成空行的原因就是因为输入换行符导致的那我使用tr -s "\n" < filename
照样可以实现,而且好多文本工具都支持一些比较复杂的文本操作,就拿UE来说去除文件中的空行就是Ctrl+R
然后勾选正则表达式,然后在“查找”的框中输入%[ ^t]++^p
在“被替换为”的框中什么都不输入( 如果该框中有其他字符应删除掉所有的字符 ),这样也可以去掉文件中的空白行。所以虽然是做同样的一件事,但是可以有好多种方法实现,就看你所处的开发环境和你更倾向于哪种实现方式了。