无法使用 sed 正则表达式删除空行

Posted

技术标签:

【中文标题】无法使用 sed 正则表达式删除空行【英文标题】:Can't remove empty lines with sed regex 【发布时间】:2012-06-01 02:40:37 【问题描述】:

我有一个这样的文件:

2733617     3.00    3   3

2733617 E1b1    8.00    8   16
2733617 E1b1b1b 2.00    2   4

2733617 I1  294.00  296 590
2733617 I2  1.00    1   2

2733617 I2a1    2.00    2   4

sed '/^$/d' 对我不起作用。 Outfile 看起来就像 infile。它应该删除空行。

【问题讨论】:

检查那些“空”行上没有空格(包括回车):od -c filename 感谢您提供一个很高兴知道的命令。但是空行中只有“\n”。 sed -n l file 将显示 sed 在删除换行符后看到的内容。 每个空行都有美元符号。 多么奇怪。你的命令应该有效。你能发布od -x的输出吗? 【参考方案1】:

你也可以试试:

 sed -n '/^./p'

仅打印行首至少有一个字符的行。 (顺便说一句sed '/^$/d' 为我工作)

【讨论】:

1.也可以使用grep -v '^$' 2、sed命令如何使用?使用 UNIX 管道? (cat file | sed ...)?也许您正在管道标准错误输出而不是标准输出? Grep 给了我同样的结果。我“sed 'blahblah' 文件 > 新文件”。【参考方案2】:

由于“空白”行中似乎存在未知的不可打印字符,您可以重新编写 sed 命令以仅显示其中包含可打印字符的行:

sed -n '/[!-~]/p'

【讨论】:

【参考方案3】:

不幸的是,手册说使用像[!-~] 这样的范围是不安全的。但是,最终使用:print: 打印包含可打印字符的行对我有用:

sed -n '/[[:print:]]/p'

【讨论】:

这是一个老问题,我不知道这个神秘的文件今天在哪里。【参考方案4】:

删除空行:

sed '/^[[:space:]]*$/d'

【讨论】:

格伦,对不起。我是sed 的菜鸟。你能解释一下d 修饰符的作用吗?我用谷歌搜索没有结果:)

以上是关于无法使用 sed 正则表达式删除空行的主要内容,如果未能解决你的问题,请参考以下文章

Shell编程之正则表达式

使用宏删除 VB.NET 代码中的所有注释和空行的 Visual Studio 正则表达式

使用正则匹配删除文本空行 - 正则 - 空白行 - vscode

使用正则表达式删除星号和空行

Notepad ++中的正则表达式删除空行

Shell 学习:正则表达式