用grep删除空行

nod*_*nja 150 terminal grep text newline

我试过grep -v '^$'Linux,但没用.此文件来自Windows文件系统.

ars*_*ars 274

请尝试以下方法:

grep -v -e '^$' foo.txt
Run Code Online (Sandbox Code Playgroud)

-e选项允许正则表达式模式进行匹配.

单引号^$使它适用于Cshell.其他炮弹会对单引号或双引号感到满意.

更新:这适用于我的空白行或"所有空格"文件(如带有"\ r \n"样式行结尾的窗口行),而上面只删除带有空行和unix样式行结尾的文件:

grep -v -e '^[[:space:]]*$' foo.txt
Run Code Online (Sandbox Code Playgroud)

  • 这应该是`grep -E -v`,`-e`之后的所有内容都被解释为模式. (4认同)
  • `grep -v -e'^ [[:space:]]*$' - e'^#'file`将为您提供脚本或配置文件中的所有非空白,非注释行(或任何文件类型,使用哈希字符进行评论). (4认同)
  • “‘-e’选项允许使用正则表达式模式进行匹配。” 这是非常**误导**的。`-e` 是 (POSIX-) 定义:`这可用于指定多个搜索模式,或保护以连字符 (-) 开头的模式。`(来自 [手册](https://linux .die.net/man/1/grep))。默认情况下,Grep 已经需要一个(基本)正则表达式。对于这种模式,您可以完全省略 `-e`:`grep -v '^[[:space:]]*$' foo.txt`。 (3认同)

Fre*_*lly 58

把事情简单化.

grep . filename.txt
Run Code Online (Sandbox Code Playgroud)

  • 这给了我文件中的所有行 (3认同)
  • 这是完美的解决方案。简单并且可以在 Linux 上运行。 (3认同)
  • @LưuVĩnhPhúc它应该输出文件中除空行之外的所有行. (2认同)
  • 这对我来自基于 linux 的系统的文件有效,但不适用于来自 Windows 的文件。大概是因为 Windows 行结束字符。 (2认同)

gho*_*g74 28

$ dos2unix file 
$ grep -v "^$" file
Run Code Online (Sandbox Code Playgroud)

或者只是简单的awk

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

如果您没有dos2unix,那么您可以使用tr之类的工具

tr -d '\r' < "$file" > t ; mv t "$file"
Run Code Online (Sandbox Code Playgroud)


Sep*_*ero 15

grep -v "^[[:space:]]*$"

The -v makes it print lines that do not completely match

===Each part explained===
^             match start of line
[[:space:]]   match whitespace- spaces, tabs, carriage returns, etc.
*             previous match (whitespace) may exist from 0 to infinite times
$             match end of line
Run Code Online (Sandbox Code Playgroud)

运行代码 -

$ echo "
> hello
>       
> ok" |
> grep -v "^[[:space:]]*$"
hello
ok
Run Code Online (Sandbox Code Playgroud)

为了更多地了解这是如何/为什么这样做,我建议阅读正则表达式.http://www.regular-expressions.info/tutorial.html

  • 这是如何以及为什么有效?如果你能解释一下,你的答案会好得多.例如,你的正则表达式匹配字符串的开头然后使用POSIX标准的一个或多个空格然后是字符串的结尾,即使用grep -v它将删除所有仅为空格的行.对?如果没有空格会发生什么; 它只是一个换行符? (2认同)

小智 6

如果您有连续多个空行的序列,并且希望每个序列只有一个空行,请尝试

grep -v "unwantedThing" foo.txt | cat -s
Run Code Online (Sandbox Code Playgroud)

cat -s抑制重复的空输出行。

你的输出将来自

match1



match2
Run Code Online (Sandbox Code Playgroud)

match1

match2
Run Code Online (Sandbox Code Playgroud)

原始输出中的三个空行将被压缩或“压缩”为一个空行。


jsp*_*pek 5

文件中的行是否包含空格字符?

如果是这样那么

grep "\S" file.txt

否则

grep . file.txt

答案来自: https: //serverfault.com/a/688789