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

sed '/^$/d'

但我运气不佳。

例如,我有这样几行:

xxxxxx


yyyyyy


zzzzzz

我希望它是这样的:

xxxxxx
yyyyyy
zzzzzz

这个的代码应该是什么?


当前回答

这也适用于awk。

awk '!/^$/' file
xxxxxx
yyyyyy
zzzzzz

其他回答

我相信这是最简单和最快的方法:

cat file.txt | grep .

如果你需要忽略所有空白行,那么试试这个:

cat file.txt | grep '\S'

例子:

s="\
\
a\
 b\
\
Below is TAB:\
    \
Below is space:\
 \
c\
\
"; echo "$s" | grep . | wc -l; echo "$s" | grep '\S' | wc -l

输出

7
5

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

egrep -v "^$" file.txt

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

$ 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

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

如果你想使用现代Rust工具,你可以考虑:

ripgrep: Cat数据文件| rg '。'带空格的行被认为是非空的 cat datafile | rg '\S'行带空格被认为是空的 rg '\S'带空格的数据文件行被认为是空的(可以添加-N来删除在屏幕上显示的行号) sd 带空格的Cat数据文件| sd '^\n' "行被认为是非空的 带空格的Cat数据文件| sd '^\s*\n' "行被认为是空的 Sd '^\s*\n' "数据文件就地编辑