我正在尝试使用sed删除空行:

sed '/^$/d'

但我运气不佳。

例如,我有这样几行:

xxxxxx


yyyyyy


zzzzzz

我希望它是这样的:

xxxxxx
yyyyyy
zzzzzz

这个的代码应该是什么?


当前回答

使用vim编辑器删除空行

美元:% s / ^ \ n / / g

其他回答

你也可以使用"grep"来做类似的事情:

egrep -v "^$" file.txt

您正在尝试的命令是正确的,只需使用-E标志。

sed -E '/^$/d'

-E标志使sed捕获扩展正则表达式。更多信息请点击这里

我的bash特定的答案是建议使用perl替换操作符与全局模式g标志,如下所示:

$ perl -pe s'/^\n|^[\ ]*\n//g' $file
xxxxxx
yyyyyy
zzzzzz

这个答案说明了计算空行中是否有空格([\]*),以及使用|分隔多个搜索词/字段。在macOS High Sierra和CentOS 6/7上测试。

仅供参考,OP的原始代码sed '/^$/d' $文件在高性能超级计算集群的macOS High Sierra和CentOS 6/7 Linux的bash Terminal中正常工作。

借助这里的公认答案和上面的公认答案,我使用了:

$ sed 's/^ *//; s/ *$//; /^$/d; /^\s*$/d' file.txt > output.txt

`s/^ *//`  => left trim
`s/ *$//`  => right trim
`/^$/d`    => remove empty line
`/^\s*$/d` => delete lines which may contain white space

这涵盖了所有的基础,完美地满足了我的需求。向最初的海报致敬@肯特和@凯文

另一个没有sed, awk, perl等的选项

strings $file > $output

字符串-打印文件中可打印字符的字符串。