删除某个目录下所有文件中的所有空行的最简单方法-sed
删除某个目录下所有文件中的所有空行
1 目标
本文是为了给大家提供一个“删除某个目录下所有文件中的所有空行”的最简单的方法,没有之一。
2 背景
这次到背景出差,临时需要将Oracle数据库中的数据导出为文本文件,然后导入到人大金仓数据库。导出时一切顺利,导入时发现无法导入,原因是我导出的文件中有空行,因为Oracle导出时是分批导出的,每批导出2000行,每批之间有一个空行。
那么,我就需要删除导出的文件中的所有的空格。
3 解决方案
如果是一个文件,那也简单,只要 vim 打开文件,然后输入 :%s/^\n//g
,进行全局替换,就能去掉所有的空行。
但是当时的需求是Oracle导出了几十个表的数据,也就是说,我要删除掉几十个文档中的空行。如果一个个文档去处理,工作量有点大,而且可能处理错误,或漏掉某个文档。
此时sed 这个神器该闪亮登场了!
首先打开linux终端,进入到存放导出文件的目录中,然后执行命令 sed -i '/^\s*$/d' *
,一下子就处理好了,而且执行效率贼高,当时很多文件都是几十万行,几百万行,几分钟就处理好了。
该命令意思是匹配并处理当前目录下的所有文件,^\s*$
表示用正则表达式匹配每个文件中的空行, d
表示删除匹配到的行, 前面的 -i
参数,表示直接操作文件,即直接修改文件本身,如果不加参数 -i
,则只会将去掉空行后的文件内容直接打印到屏幕上,而不会修改文件本身。
4 扩展
- sed命令真的很厉害,不仅仅可以删掉空行,也可以删除任意正则表达式匹配的行,当然,它还有其他很多牛逼的功能,这里就不再扩展了。
- 当然,也要注意到,sed直接操作文件的时候,一定要谨慎,一不小心就把重要内容删除了,找都找不回来,所以我们执行该命令前一定要做好备份,同时先进行测试看是否达到了预期效果。