我正在尝试从大型文本文件中删除空行。出于某种原因,似乎两者都不是
sed "/^$/d" file.txt > trimmed.txt
也不
grep -v "^$" file.txt > trimmed.txt
也不是
awk /./ file.txt > trimmed.txt
做任何事情。有什么想法吗?
更新
感谢@fedorqui 和@Sebastian Stigler 的精彩评论,问题很快被确定为每行末尾的 DOS/Windows 回车符 (^M$)。
虽然我很欣赏 Sebatian 关于使用 dos2unix
重新格式化文件的建议,但我更愿意使用大多数 linux 发行版中普遍可用的工具来解决此问题。
对我有用的解决方案是@Jeremy Stein 对这个问题给出的答案 [ Can't remove empty lines with sed regex :
sed -n '/[!-~]/p' file.txt > trimmed.txt
最佳答案
我只是用玩具示例尝试了突击队员,只要 file.txt
是一个带有 unix 换行符的文件,它们就可以正常工作。如果文件包含 windows 换行符,则所有命令都无法删除空行。
您可以使用 dos2unix
linux 工具将 file.txt
中的换行符转换为 unix 换行符。如果您需要在 Windows 系统上输出,则可以使用 unix2dos
将 trimmed.txt
转换为带有 Windows 换行符的文件。
关于linux - 为什么 SED、GREP 或 AWK 无法从文本文件中删除空行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28211638/