linux - 为什么 SED、GREP 或 AWK 无法从文本文件中删除空行?

标签 linux shell awk sed grep

我正在尝试从大型文本文件中删除空行。出于某种原因,似乎两者都不是

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 系统上输出,则可以使用 unix2dostrimmed.txt 转换为带有 Windows 换行符的文件。

关于linux - 为什么 SED、GREP 或 AWK 无法从文本文件中删除空行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28211638/

相关文章:

linux - 在不同的输出线上进行操作

linux - 在 Linux 中打印多列的总和

linux - 相对比较表达式

linux - awk: 太多输出文件 10 记录号 12

regex - 组合多个 sed 命令

linux - 在远程机器上执行部分 shell 脚本

awk - 用awk对多行记录进行排序

c++ - 将 Crypto++ 代码集成到 Linux 中的 Qt 应用程序

linux - gcc -static 会影响所有提供的库吗?

linux - Linux 上的缓冲过滤管道