如何在Linux中删除文件中的空行

如何在Linux中删除文件中的空行

我的文件中有一个输出,其中包含空格,例如

daily/A3D05180000052121001 30698

daily/A3D05180000052200001 30698

daily/A3D05180000052203001 30698

我需要删除空行,我的输出应该是这样的

daily/A3D05180000052121001 30698
daily/A3D05180000052200001 30698
daily/A3D05180000052203001 30698

我尝试使用sed

sed -i -e '/./,$!d' -e :a -e '/^\n*$/{$d;N;ba' -e '}' "$FILESIZE3"

但它没有成功...任何人都可以帮我解决这个问题吗

答案1

sed '/^[[:space:]]*$/d' file >file.modified

这将删除所有file完全空的行或仅包含类似空格的字符。在这种情况下,类似空格的字符包括 DOS 文本文件中每行末尾的回车符(由 Unix 工具处理时)、制表符和空格。结果数据将被写入file.modified

删除重定向并改为使用-i选项将进行“就地”修改,file而不是写入新文件,但请注意该选项是不可移植的,并且在不同的 Unix 系统上可能会以不同的方式工作(如何使用 sed -i (就地编辑)实现可移植性?)。

答案2

不确定您的其他人sed在做什么,但这不是您正在寻找的吗?

host:~ # sed -e '/^$/d' file.txt
daily/A3D05180000052121001 30698
daily/A3D05180000052200001 30698
daily/A3D05180000052203001 30698

如果这不起作用,请澄清要求。

答案3

AWK表示:

awk '!/^$/{ print }' infile > outfile && mv outfile infile 

答案4

在vim中,我使用全局命令来删除空行。不确定它对您的情况是否有帮助。

#:[range]g/pattern/cmd

该示例通过对匹配模式的每一行执行命令 cmd 来作用于指定的[范围](默认整个文件)(执行命令是以冒号开头,例如 vi 中的 :d 表示删除)。在你的情况下它可以是

:g/^$/d

如果中间有空格或制表符

:g/^[\s\t]*$/d

希望能帮助到你。

相关内容