删除使用SED空行(Delete empty lines using sed)

2019-09-02 03:50发布

我想删除使用SED空行:

sed '/^$/d'

但我与它没有运气。

例如,我有这些行:

xxxxxx


yyyyyy


zzzzzz

我希望它是这样的:

xxxxxx
yyyyyy
zzzzzz

应该是什么这样的代码?

Answer 1:

你可能在你的“空”行空格或制表符。 使用POSIX类与sed删除只含有空格的所有行:

sed '/^[[:space:]]*$/d'

使用ERE,例如用GNU sed的一个较短的版本:

sed -r '/^\s*$/d'

(请注意,sed的支持PCRE)。



Answer 2:

我错过了awk解决方案:

awk 'NF' file

这将返回:

xxxxxx
yyyyyy
zzzzzz

这是如何运作的? 由于NF代表“字段数”,它们是空的线具有0 fiedls,使得AWK评估0为False,并且不会打印线; 但是,如果有至少一个领域,评价是真,使awk执行其默认动作:打印当前行。



Answer 3:

sed '/^$/d'应该是罚款,你希望修改的地方文件? 如果是这样你应该使用-i标志。

也许这些线路不为空,所以如果是这样的话,看看这个问题从txtfiles删除空行,从开始和行末删除空格我相信这是你想要达到的目标。



Answer 4:

  • '/^[[:space:]]*$/d'
  • '/^\s*$/d'
  • '/^$/d'
  • -n '/^\s*$/!p'

grep的

  • .
  • -v '^$'
  • -v '^\s*$'
  • -v '^[[:space:]]*$'

AWK

  • /./
  • 'NF'
  • 'length'
  • '/^[ \t]*$/ {next;} {print}'
  • '!/^[ \t]*$/'


Answer 5:

我相信这是最简单和最快的国家之一:

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


Answer 6:

从接受的答案帮助这里和上面的接受的答案,我已经使用:

$ 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

这涵盖了所有的基地和工程完全满足我的需求。 荣誉原来的海报@Kent和@kev



Answer 7:

你可以说:

sed -n '/ / p' filename    #there is a space between '//'


Answer 8:

你可以做这样的事情使用的“grep”,太:

egrep -v "^$" file.txt


Answer 9:

这部作品在AWK为好。

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


Answer 10:

你最有可能看到意外的行为,因为你的文本文件,在Windows上创建的,所以线序的结尾\r\n 。 您可以使用DOS2UNIX的将其转换为一个UNIX风格的文本文件运行SED或使用前

sed -r "/^\r?$/d"

删除空行回车是否是存在的。



Answer 11:

我的bash特异性答案是推荐使用perl与全球格局替换操作g这个标志,如下所示:

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

这个答案说明了空行是否有空格的会计( [\ ]* ),以及使用| 分隔多个搜索词/场。 经测试在MacOS高塞拉利昂和CentOS 6/7。

仅供参考,运算的原代码sed '/^$/d' $file工作得很好,在bash的高性能超级计算集群终端在MacOS高塞拉利昂和CentOS Linux的6/7。



Answer 12:

对我来说,在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 =============


文章来源: Delete empty lines using sed
标签: linux unix sed