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

Jam*_*272 30 command-line shell text-processing files

我想从文件中删除所有空行。即使该行包含空格或制表符,也应将其删除。

Sté*_*las 30

grep适用于非空白:

grep '[^[:blank:]]' < file.in > file.out
Run Code Online (Sandbox Code Playgroud)

[:blank:], 在字符范围 ( [...]) 内,称为 POSIX 字符类。有一些像[:alpha:], [:digit:]...[:blank:]匹配水平空白(在 POSIX 语言环境中,即空格和制表符,但在其他语言环境中可能有更多,例如 UTF8 语言环境中的所有 Unicode 水平间距字符)而[[:space:]]匹配水平和垂直白色空格字符(与[:blank:]垂直制表符、换页符等加号相同)。

grep '[:blank:]'
Run Code Online (Sandbox Code Playgroud)

将返回包含任何字符:blan或 的行k。字符类仅在 内被识别[...],并且^[...]否定该集合。所以[^[:blank:]]意味着除了空白字符之外的任何字符。


cuo*_*glm 29

这是一个awk解决方案:

$ awk NF file
Run Code Online (Sandbox Code Playgroud)

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

  • `awk -i inplace NF file` 来替换文件。 (3认同)

Mic*_*ant 7

怎么样:

sed -e 's/^[[:blank:]]*$//' source_file > newfile
Run Code Online (Sandbox Code Playgroud)

或者

sed -e '/^[[:blank:]]*$/d' source_file > newfile
Run Code Online (Sandbox Code Playgroud)

IE

对于每一行,替换:

  • 如果它开始 (" ^")
  • 带有空格或制表符 (" [[:blank:]]") 零次或多次 (" *")
  • 然后是行尾 (" $")

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

  • `[[:space:]]` 包括制表符。如果不是,如果一个空格跟在一个制表符之后,你的正则表达式就会失败。 (4认同)