我正在尝试使用sed删除空行:
sed '/^$/d'
但我运气不佳。
例如,我有这样几行:
xxxxxx
yyyyyy
zzzzzz
我希望它是这样的:
xxxxxx
yyyyyy
zzzzzz
这个的代码应该是什么?
我正在尝试使用sed删除空行:
sed '/^$/d'
但我运气不佳。
例如,我有这样几行:
xxxxxx
yyyyyy
zzzzzz
我希望它是这样的:
xxxxxx
yyyyyy
zzzzzz
这个的代码应该是什么?
当前回答
对我来说,使用FreeBSD 10.1和sed只工作了这个解决方案:
sed -e '/^[ ]*$/d' "testfile"
[]里面有空格和制表符。
测试文件包含:
fffffff next 1 tabline ffffffffffff
ffffffff next 1 Space line ffffffffffff
ffffffff empty 1 lines ffffffffffff
============ EOF =============
其他回答
你可以说:
sed -n '/ / p' filename #there is a space between '//'
我错过了awk的解决方案:
awk 'NF' file
这将返回:
xxxxxx
yyyyyy
zzzzzz
这是如何工作的呢?因为NF代表“字段的数量”,那些为空的行有0个字段,因此awk的计算结果为0到False,并且不打印任何行;但是,如果至少有一个字段,则求值为True,并使awk执行默认操作:打印当前行。
对我来说,使用FreeBSD 10.1和sed只工作了这个解决方案:
sed -e '/^[ ]*$/d' "testfile"
[]里面有空格和制表符。
测试文件包含:
fffffff next 1 tabline ffffffffffff
ffffffff next 1 Space line ffffffffffff
ffffffff empty 1 lines ffffffffffff
============ EOF =============
另一个没有sed, awk, perl等的选项
strings $file > $output
字符串-打印文件中可打印字符的字符串。
借助这里的公认答案和上面的公认答案,我使用了:
$ 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
这涵盖了所有的基础,完美地满足了我的需求。向最初的海报致敬@肯特和@凯文