使用SED删除空行

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

sed '/^$/d' 

但我没有运气。 例如我有这样的话:

 xxxxxx yyyyyy zzzzzz 

我想它是这样的:

 xxxxxx yyyyyy zzzzzz 

这个代码应该是什么?

你的空行可能有空格/制表符。 如果是这样,这将有助于:

 sed '/^\s*$/d' 

这使用\s来匹配任何空格字符。

sed '/^$/d'应该没问题,你是否期望修改文件? 如果是的话,你应该使用-i标志。

也许这些行不是空的,所以如果是这样的话,看看这个问题从txtfiles中删除空行,删除开始和结束行的空格我相信这就是你想要实现的。

我错过了awk解决scheme:

 awk 'NF' file 

哪个会返回:

 xxxxxx yyyyyy zzzzzz 

这个怎么用? 由于NF代表“字段数”,那些空的行有0个结果,所以awk的结果为0为False,不打印行; 但是,如果至less有一个字段,则评估为True,并使awk执行其默认操作:打印当前行。

我相信这是最简单和最快的一个:

 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 

在这里接受的答案和上面接受的答案的帮助下,我使用了:

 $ 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赞不绝口

SED

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

grep的

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

AWK

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

你可以说:

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

你也可以用“grep”来做类似的事情:

 egrep -v "^$" file.txt 

这也适用于awk。

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

您很可能会看到意外的行为,因为您的文本文件是在Windows上创build的,所以行结束符是\ r \ n。 在运行sed或使用之前,可以使用dos2unix将其转换为UNIX样式的文本文件

sed -r“/ ^ \ r?$ / d”

删除空行,不pipe回车是否在那里。

对于我用FreeBSD 10.1和sed只能工作这个解决scheme:

 sed -e '/^[ ]*$/d' "testfile" 

[]里面有空格和制表符号。

testing文件包含:

 fffffff next 1 tabline ffffffffffff ffffffff next 1 Space line ffffffffffff ffffffff empty 1 lines ffffffffffff ============ EOF =============