如何从 Unix 中的文件中删除空行/空白行(包括空格)?

Mic*_*Ang 109 linux unix command-line-interface text parsing

如何使用命令行在 Unix/Linux 中的文件中删除空/空白(仅包括空格)行?

file.txt 的内容

Line:Text
1:<blank>
2:AAA
3:<blank>
4:BBB
5:<blank>
6:<space><space><space>CCC
7:<space><space>
8:DDD
Run Code Online (Sandbox Code Playgroud)

期望输出

1:AAA
2:BBB
3:<space><space><space>CCC
4:DDD
Run Code Online (Sandbox Code Playgroud)

Mar*_*els 138

这个 sed 行应该可以解决问题:

sed -i '/^$/d' file.txt
Run Code Online (Sandbox Code Playgroud)

-i意味着它将就地编辑文件。

  • 它实际上需要是 "/^ *$/d" 才能删除仅包含空格的行。 (21认同)
  • @SeanReifschneider "/^\s*$/d" 会不会更好,因为它包含标签?虽然原始帖子中没有提到它,但对我来说这似乎是一个更好的选择。 (6认同)
  • @SeanReifschneider 在写这个答案时,这个要求不是问题吗? (3认同)
  • [添加`\s*` 与stackoverflow 问题给出的解决方案相同](/sf/answers/1149014261/) (2认同)

ken*_*orb 67

grep

简单的解决方案是使用grepGNUBSD)命令,如下所示。

注意:如果你得到不需要的颜色,那意味着你grep是别名grep --color=auto(检查由type grep)。在这种情况下,您可以添加--color=none参数,或仅以 as \grep(忽略别名)运行命令。


ripgrep

类似于ripgrep(适用于更大的文件)。

删除不包括带空格的行的空行:

rg -N . file.txt
Run Code Online (Sandbox Code Playgroud)

或包括带空格的行:

rg -N "\S" file.txt
Run Code Online (Sandbox Code Playgroud)

也可以看看:

  • `grep .` 似乎是最简单的解决方案。 (5认同)
  • @wisbucky 您会看到颜色,因为在您的系统上,`grep` 是`grep --color=auto` 的别名(检查方式:`type grep`)。您可以将其作为 `\grep` 运行或使用 `--color=none` 参数。 (3认同)

Kam*_*iel 31

sed '/^$/d' file.txt
Run Code Online (Sandbox Code Playgroud)

d 是删除一行的 sed 命令。^$是一个仅匹配空行的正则表达式,行开始后跟行结束。


小智 22

您可以将 -v 选项与 grep 一起使用来删除匹配的空行。

像这样

grep -Ev "^$" file.txt
Run Code Online (Sandbox Code Playgroud)

  • 我不相信你需要`-E`,至少GNU grep不需要,但除此之外,我很高兴看到grep完成了这个!这是我每次都比 sed 更喜欢达到的目标;在我看来,在线过滤器比在线编辑器更好。 (4认同)

Ste*_*nny 13

这是一个awk解决方案:

awk NF file.txt
Run Code Online (Sandbox Code Playgroud)

使用 Awk,NF只在非空行上设置。当这个条件匹配时,Awk 的默认动作是打印整行。


小智 7

要删除空行,您可以使用以下命令挤压新行重复tr

cat file.txt | tr -s '\n' '\n'
Run Code Online (Sandbox Code Playgroud)