我正在尝试使用sed删除空行:
sed '/^$/d'
但我运气不佳。
例如,我有这样几行:
xxxxxx
yyyyyy
zzzzzz
我希望它是这样的:
xxxxxx
yyyyyy
zzzzzz
这个的代码应该是什么?
我正在尝试使用sed删除空行:
sed '/^$/d'
但我运气不佳。
例如,我有这样几行:
xxxxxx
yyyyyy
zzzzzz
我希望它是这样的:
xxxxxx
yyyyyy
zzzzzz
这个的代码应该是什么?
当前回答
Sed '/^$/d'应该是好的,你期望修改文件到位吗?如果是这样,您应该使用-i标志。
也许这些行不是空的,如果是这样的话,看看这个问题从txtfiles中删除空行,从行开始和行结束删除空格,我相信这就是你想要达到的目的。
其他回答
我的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 -n '/ / p' filename #there is a space between '//'
对我来说,使用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 =============
你也可以使用"grep"来做类似的事情:
egrep -v "^$" file.txt
您正在尝试的命令是正确的,只需使用-E标志。
sed -E '/^$/d'
-E标志使sed捕获扩展正则表达式。更多信息请点击这里