如何从文件中删除空白行(包括制表符和空格)?


Answers:


26

grep用于非空白:

grep '[^[:blank:]]' < file.in > file.out

[:blank:]字符范围([...])内的POSIX字符类。有一些like [:alpha:][:digit:]... [:blank:]匹配水平空白(在POSIX语言环境中,是空格和制表符,但在其他语言环境中则可能更多,例如UTF8语言环境中的所有Unicode水平间距字符),而同时[[:space:]]匹配水平和垂直白色空格字符(与[:blank:]诸如垂直制表符,换页符之类的其他内容一样)。

grep '[:blank:]'

都将返回一个包含任何字符的线条,:blank。字符类仅在中识别[...],并且^[...]集合中取反。因此[^[:blank:]]表示除空白字符以外的任何字符。


1
还应该有$for的行尾吗?
Michael Durrant

@MichaelDurrant双方都不锚定
jordanm

1
@MichaelDurrant。[^[:blank:]]$只匹配以非空白结尾的行。我们要包含一个非空行的任何地方
斯特凡Chazelas

@StephaneChazelas我尝试了grep [:blank:] SOURCEFILE,即使此命令有效。我了解[]用于字符类,您能给我一下它的工作原理吗?摘要:blank:对我来说是新的。
Jamshed Ansari user3000272

在任何情况下grep -E '\S'都行不通吗?
terdon

21

这是一个awk解决方案:

$ awk NF file

使用时awkNF仅在非空白行上设置。当此条件匹配时,awk默认操作print将打印整行。


整洁,这也会删除带有空格的行。
wisbucky

7

怎么样:

sed -e 's/^[[:blank:]]*$//' source_file > newfile

要么

sed -e '/^[[:blank:]]*$/d' source_file > newfile

对于每一行,替换为:

  • 如果开始(“ ^”)
  • 空格或制表符(“ [[:blank:]]”)零次或多次(“ *”)
  • 然后是该行的结尾(“ $”)

有关:: blank ::和其他特殊字符的详细信息,请访问http://www.zytrax.com/tech/web/regex.htm#special


4
[[:space:]]包括标签。如果不是这样,则如果制表符后面有空格,则您的正则表达式将失败。
jordanm

wctype(3)isalpha(3)联机帮助页介绍一下字符类将匹配。
jordanm

您可能要删除第一个不回答问题的人。
斯特凡Chazelas

@MichaelDurrant能否请您写点有关[[:blank:]]的内容?
Jamshed Ansari user3000272

添加了[[:: blank ::]]的信息。史蒂芬(Stephane),为什么不先做?我以为//最后将什么都替换掉。
Michael Durrant


3

看起来我发现速度不是很快,但很有趣:

| xargs -L1


1
简短的简短介绍,但它还有更多用途:还要删除前导空格和制表符。
jringoot

哦,发现它更有能力吗?很好!;-P
poige

1
并且它会截断行(默认为1024个字符),请参见联机帮助页:linux.die.net/man/1/xargs
jringoot

我爱上了这个简单的工具!!!! 11)
poige


0

使用以下命令:

grep '\S' FILE

删除所有行,包括空格或制表符。

否则,删除不包括带有空格/制表符的行,请使用:

grep . FILE

例如:

$  printf "line1\n\nline2\n \nline3\n" > FILE
$  cat -v FILE
line1

line2

line3
$  grep '\S' FILE
line1
line2
line3
$  grep . FILE
line1
line2

line3

也可以看看:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.